{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Import necessary dependencies and settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import re\n",
    "import nltk\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "pd.options.display.max_colwidth = 200\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sample corpus of text documents"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Document</th>\n",
       "      <th>Category</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>The sky is blue and beautiful.</td>\n",
       "      <td>weather</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Love this blue and beautiful sky!</td>\n",
       "      <td>weather</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The quick brown fox jumps over the lazy dog.</td>\n",
       "      <td>animals</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A king's breakfast has sausages, ham, bacon, eggs, toast and beans</td>\n",
       "      <td>food</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>I love green eggs, ham, sausages and bacon!</td>\n",
       "      <td>food</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>The brown fox is quick and the blue dog is lazy!</td>\n",
       "      <td>animals</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>The sky is very blue and the sky is very beautiful today</td>\n",
       "      <td>weather</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>The dog is lazy but the brown fox is quick!</td>\n",
       "      <td>animals</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                             Document Category\n",
       "0                                      The sky is blue and beautiful.  weather\n",
       "1                                   Love this blue and beautiful sky!  weather\n",
       "2                        The quick brown fox jumps over the lazy dog.  animals\n",
       "3  A king's breakfast has sausages, ham, bacon, eggs, toast and beans     food\n",
       "4                         I love green eggs, ham, sausages and bacon!     food\n",
       "5                    The brown fox is quick and the blue dog is lazy!  animals\n",
       "6            The sky is very blue and the sky is very beautiful today  weather\n",
       "7                         The dog is lazy but the brown fox is quick!  animals"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "corpus = ['The sky is blue and beautiful.',\n",
    "          'Love this blue and beautiful sky!',\n",
    "          'The quick brown fox jumps over the lazy dog.',\n",
    "          \"A king's breakfast has sausages, ham, bacon, eggs, toast and beans\",\n",
    "          'I love green eggs, ham, sausages and bacon!',\n",
    "          'The brown fox is quick and the blue dog is lazy!',\n",
    "          'The sky is very blue and the sky is very beautiful today',\n",
    "          'The dog is lazy but the brown fox is quick!'    \n",
    "]\n",
    "labels = ['weather', 'weather', 'animals', 'food', 'food', 'animals', 'weather', 'animals']\n",
    "\n",
    "corpus = np.array(corpus)\n",
    "corpus_df = pd.DataFrame({'Document': corpus, \n",
    "                          'Category': labels})\n",
    "corpus_df = corpus_df[['Document', 'Category']]\n",
    "corpus_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Simple text pre-processing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "wpt = nltk.WordPunctTokenizer()\n",
    "stop_words = nltk.corpus.stopwords.words('english')\n",
    "\n",
    "def normalize_document(doc):\n",
    "    # lower case and remove special characters\\whitespaces\n",
    "    doc = re.sub(r'[^a-zA-Z\\s]', '', doc, re.I|re.A)\n",
    "    doc = doc.lower()\n",
    "    doc = doc.strip()\n",
    "    # tokenize document\n",
    "    tokens = wpt.tokenize(doc)\n",
    "    # filter stopwords out of document\n",
    "    filtered_tokens = [token for token in tokens if token not in stop_words]\n",
    "    # re-create document from filtered tokens\n",
    "    doc = ' '.join(filtered_tokens)\n",
    "    return doc\n",
    "\n",
    "normalize_corpus = np.vectorize(normalize_document)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['sky blue beautiful', 'love blue beautiful sky',\n",
       "       'quick brown fox jumps lazy dog',\n",
       "       'kings breakfast sausages ham bacon eggs toast beans',\n",
       "       'love green eggs ham sausages bacon',\n",
       "       'brown fox quick blue dog lazy', 'sky blue sky beautiful today',\n",
       "       'dog lazy brown fox quick'], dtype='<U51')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "norm_corpus = normalize_corpus(corpus)\n",
    "norm_corpus"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Word Embeddings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load up sample corpus - Bible"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total lines: 30103\n",
      "\n",
      "Sample line: ['1', ':', '6', 'And', 'God', 'said', ',', 'Let', 'there', 'be', 'a', 'firmament', 'in', 'the', 'midst', 'of', 'the', 'waters', ',', 'and', 'let', 'it', 'divide', 'the', 'waters', 'from', 'the', 'waters', '.']\n",
      "\n",
      "Processed line: god said let firmament midst waters let divide waters waters\n"
     ]
    }
   ],
   "source": [
    "from nltk.corpus import gutenberg\n",
    "from string import punctuation\n",
    "\n",
    "bible = gutenberg.sents('bible-kjv.txt') \n",
    "remove_terms = punctuation + '0123456789'\n",
    "\n",
    "norm_bible = [[word.lower() for word in sent if word not in remove_terms] for sent in bible]\n",
    "norm_bible = [' '.join(tok_sent) for tok_sent in norm_bible]\n",
    "norm_bible = filter(None, normalize_corpus(norm_bible))\n",
    "norm_bible = [tok_sent for tok_sent in norm_bible if len(tok_sent.split()) > 2]\n",
    "\n",
    "print('Total lines:', len(bible))\n",
    "print('\\nSample line:', bible[10])\n",
    "print('\\nProcessed line:', norm_bible[10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Implementing a word2vec model using a CBOW (Continuous Bag of Words) neural network architecture"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build Vocabulary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vocabulary Size: 12425\n",
      "Vocabulary Sample: [('perceived', 1460), ('flagon', 7287), ('gardener', 11641), ('named', 973), ('remain', 732), ('sticketh', 10622), ('abstinence', 11848), ('rufus', 8190), ('adversary', 2018), ('jehoiachin', 3189)]\n"
     ]
    }
   ],
   "source": [
    "from keras.preprocessing import text\n",
    "from keras.utils import np_utils\n",
    "from keras.preprocessing import sequence\n",
    "\n",
    "tokenizer = text.Tokenizer()\n",
    "tokenizer.fit_on_texts(norm_bible)\n",
    "word2id = tokenizer.word_index\n",
    "\n",
    "word2id['PAD'] = 0\n",
    "id2word = {v:k for k, v in word2id.items()}\n",
    "wids = [[word2id[w] for w in text.text_to_word_sequence(doc)] for doc in norm_bible]\n",
    "\n",
    "vocab_size = len(word2id)\n",
    "embed_size = 100\n",
    "window_size = 2\n",
    "\n",
    "print('Vocabulary Size:', vocab_size)\n",
    "print('Vocabulary Sample:', list(word2id.items())[:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build (context_words, target_word) pair generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def generate_context_word_pairs(corpus, window_size, vocab_size):\n",
    "    context_length = window_size*2\n",
    "    for words in corpus:\n",
    "        sentence_length = len(words)\n",
    "        for index, word in enumerate(words):\n",
    "            context_words = []\n",
    "            label_word   = []            \n",
    "            start = index - window_size\n",
    "            end = index + window_size + 1\n",
    "            \n",
    "            context_words.append([words[i] \n",
    "                                 for i in range(start, end) \n",
    "                                 if 0 <= i < sentence_length \n",
    "                                 and i != index])\n",
    "            label_word.append(word)\n",
    "\n",
    "            x = sequence.pad_sequences(context_words, maxlen=context_length)\n",
    "            y = np_utils.to_categorical(label_word, vocab_size)\n",
    "            yield (x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Context (X): ['old', 'testament', 'james', 'bible'] -> Target (Y): king\n",
      "Context (X): ['first', 'book', 'called', 'genesis'] -> Target (Y): moses\n",
      "Context (X): ['beginning', 'god', 'heaven', 'earth'] -> Target (Y): created\n",
      "Context (X): ['earth', 'without', 'void', 'darkness'] -> Target (Y): form\n",
      "Context (X): ['without', 'form', 'darkness', 'upon'] -> Target (Y): void\n",
      "Context (X): ['form', 'void', 'upon', 'face'] -> Target (Y): darkness\n",
      "Context (X): ['void', 'darkness', 'face', 'deep'] -> Target (Y): upon\n",
      "Context (X): ['spirit', 'god', 'upon', 'face'] -> Target (Y): moved\n",
      "Context (X): ['god', 'moved', 'face', 'waters'] -> Target (Y): upon\n",
      "Context (X): ['god', 'said', 'light', 'light'] -> Target (Y): let\n",
      "Context (X): ['god', 'saw', 'good', 'god'] -> Target (Y): light\n"
     ]
    }
   ],
   "source": [
    "i = 0\n",
    "for x, y in generate_context_word_pairs(corpus=wids, window_size=window_size, vocab_size=vocab_size):\n",
    "    if 0 not in x[0]:\n",
    "        print('Context (X):', [id2word[w] for w in x[0]], '-> Target (Y):', id2word[np.argwhere(y[0])[0][0]])\n",
    "    \n",
    "        if i == 10:\n",
    "            break\n",
    "        i += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build CBOW Deep Network Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_6 (Embedding)      (None, 4, 100)            1242500   \n",
      "_________________________________________________________________\n",
      "lambda_2 (Lambda)            (None, 100)               0         \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 12425)             1254925   \n",
      "=================================================================\n",
      "Total params: 2,497,425\n",
      "Trainable params: 2,497,425\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "import keras.backend as K\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, Embedding, Lambda\n",
    "\n",
    "cbow = Sequential()\n",
    "cbow.add(Embedding(input_dim=vocab_size, output_dim=embed_size, input_length=window_size*2))\n",
    "cbow.add(Lambda(lambda x: K.mean(x, axis=1), output_shape=(embed_size,)))\n",
    "cbow.add(Dense(vocab_size, activation='softmax'))\n",
    "\n",
    "cbow.compile(loss='categorical_crossentropy', optimizer='rmsprop')\n",
    "print(cbow.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg height=\"304pt\" viewBox=\"0.00 0.00 242.00 304.00\" width=\"242pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 300)\">\n",
       "<title>G</title>\n",
       "<polygon fill=\"white\" points=\"-4,4 -4,-300 238,-300 238,4 -4,4\" stroke=\"none\"/>\n",
       "<!-- 2189455658848 -->\n",
       "<g class=\"node\" id=\"node1\"><title>2189455658848</title>\n",
       "<polygon fill=\"none\" points=\"15.5,-249.5 15.5,-295.5 218.5,-295.5 218.5,-249.5 15.5,-249.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"54\" y=\"-268.8\">InputLayer</text>\n",
       "<polyline fill=\"none\" points=\"92.5,-249.5 92.5,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"120.5\" y=\"-280.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"92.5,-272.5 148.5,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"120.5\" y=\"-257.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"148.5,-249.5 148.5,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183.5\" y=\"-280.3\">(None, 4)</text>\n",
       "<polyline fill=\"none\" points=\"148.5,-272.5 218.5,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183.5\" y=\"-257.3\">(None, 4)</text>\n",
       "</g>\n",
       "<!-- 2189455657952 -->\n",
       "<g class=\"node\" id=\"node2\"><title>2189455657952</title>\n",
       "<polygon fill=\"none\" points=\"0,-166.5 0,-212.5 234,-212.5 234,-166.5 0,-166.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"40\" y=\"-185.8\">Embedding</text>\n",
       "<polyline fill=\"none\" points=\"80,-166.5 80,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"108\" y=\"-197.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"80,-189.5 136,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"108\" y=\"-174.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"136,-166.5 136,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"185\" y=\"-197.3\">(None, 4)</text>\n",
       "<polyline fill=\"none\" points=\"136,-189.5 234,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"185\" y=\"-174.3\">(None, 4, 100)</text>\n",
       "</g>\n",
       "<!-- 2189455658848&#45;&gt;2189455657952 -->\n",
       "<g class=\"edge\" id=\"edge1\"><title>2189455658848-&gt;2189455657952</title>\n",
       "<path d=\"M117,-249.366C117,-241.152 117,-231.658 117,-222.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"120.5,-222.607 117,-212.607 113.5,-222.607 120.5,-222.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2189455658960 -->\n",
       "<g class=\"node\" id=\"node3\"><title>2189455658960</title>\n",
       "<polygon fill=\"none\" points=\"9,-83.5 9,-129.5 225,-129.5 225,-83.5 9,-83.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"40\" y=\"-102.8\">Lambda</text>\n",
       "<polyline fill=\"none\" points=\"71,-83.5 71,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"99\" y=\"-114.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"71,-106.5 127,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"99\" y=\"-91.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"127,-83.5 127,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"176\" y=\"-114.3\">(None, 4, 100)</text>\n",
       "<polyline fill=\"none\" points=\"127,-106.5 225,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"176\" y=\"-91.3\">(None, 100)</text>\n",
       "</g>\n",
       "<!-- 2189455657952&#45;&gt;2189455658960 -->\n",
       "<g class=\"edge\" id=\"edge2\"><title>2189455657952-&gt;2189455658960</title>\n",
       "<path d=\"M117,-166.366C117,-158.152 117,-148.658 117,-139.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"120.5,-139.607 117,-129.607 113.5,-139.607 120.5,-139.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188407672280 -->\n",
       "<g class=\"node\" id=\"node4\"><title>2188407672280</title>\n",
       "<polygon fill=\"none\" points=\"15,-0.5 15,-46.5 219,-46.5 219,-0.5 15,-0.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"40.5\" y=\"-19.8\">Dense</text>\n",
       "<polyline fill=\"none\" points=\"66,-0.5 66,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"94\" y=\"-31.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"66,-23.5 122,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"94\" y=\"-8.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"122,-0.5 122,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"170.5\" y=\"-31.3\">(None, 100)</text>\n",
       "<polyline fill=\"none\" points=\"122,-23.5 219,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"170.5\" y=\"-8.3\">(None, 12425)</text>\n",
       "</g>\n",
       "<!-- 2189455658960&#45;&gt;2188407672280 -->\n",
       "<g class=\"edge\" id=\"edge3\"><title>2189455658960-&gt;2188407672280</title>\n",
       "<path d=\"M117,-83.3664C117,-75.1516 117,-65.6579 117,-56.7252\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"120.5,-56.6068 117,-46.6068 113.5,-56.6069 120.5,-56.6068\" stroke=\"black\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import SVG\n",
    "from keras.utils.vis_utils import model_to_dot\n",
    "\n",
    "SVG(model_to_dot(cbow, show_shapes=True, show_layer_names=False, \n",
    "                 rankdir='TB').create(prog='dot', format='svg'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train model for 5 epochs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processed 100000 (context, word) pairs\n",
      "Processed 200000 (context, word) pairs\n",
      "Processed 300000 (context, word) pairs\n",
      "Epoch: 1 \tLoss: 4257900.60084\n",
      "\n",
      "Processed 100000 (context, word) pairs\n",
      "Processed 200000 (context, word) pairs\n",
      "Processed 300000 (context, word) pairs\n",
      "Epoch: 2 \tLoss: 4256209.59646\n",
      "\n",
      "Processed 100000 (context, word) pairs\n",
      "Processed 200000 (context, word) pairs\n",
      "Processed 300000 (context, word) pairs\n",
      "Epoch: 3 \tLoss: 4247990.90456\n",
      "\n",
      "Processed 100000 (context, word) pairs\n",
      "Processed 200000 (context, word) pairs\n",
      "Processed 300000 (context, word) pairs\n",
      "Epoch: 4 \tLoss: 4225663.18927\n",
      "\n",
      "Processed 100000 (context, word) pairs\n",
      "Processed 200000 (context, word) pairs\n",
      "Processed 300000 (context, word) pairs\n",
      "Epoch: 5 \tLoss: 4104501.48929\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(1, 6):\n",
    "    loss = 0.\n",
    "    i = 0\n",
    "    for x, y in generate_context_word_pairs(corpus=wids, window_size=window_size, vocab_size=vocab_size):\n",
    "        i += 1\n",
    "        loss += cbow.train_on_batch(x, y)\n",
    "        if i % 100000 == 0:\n",
    "            print('Processed {} (context, word) pairs'.format(i))\n",
    "\n",
    "    print('Epoch:', epoch, '\\tLoss:', loss)\n",
    "    print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12424, 100)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>90</th>\n",
       "      <th>91</th>\n",
       "      <th>92</th>\n",
       "      <th>93</th>\n",
       "      <th>94</th>\n",
       "      <th>95</th>\n",
       "      <th>96</th>\n",
       "      <th>97</th>\n",
       "      <th>98</th>\n",
       "      <th>99</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>shall</th>\n",
       "      <td>-1.183386</td>\n",
       "      <td>-2.866214</td>\n",
       "      <td>1.046431</td>\n",
       "      <td>0.943265</td>\n",
       "      <td>-1.021784</td>\n",
       "      <td>-0.047069</td>\n",
       "      <td>2.108584</td>\n",
       "      <td>-0.458692</td>\n",
       "      <td>-1.698881</td>\n",
       "      <td>0.905800</td>\n",
       "      <td>...</td>\n",
       "      <td>0.655786</td>\n",
       "      <td>0.703828</td>\n",
       "      <td>0.821803</td>\n",
       "      <td>-0.093732</td>\n",
       "      <td>-2.474536</td>\n",
       "      <td>2.309505</td>\n",
       "      <td>0.713962</td>\n",
       "      <td>-0.175176</td>\n",
       "      <td>0.262700</td>\n",
       "      <td>0.818652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unto</th>\n",
       "      <td>-1.725262</td>\n",
       "      <td>-1.765972</td>\n",
       "      <td>1.411971</td>\n",
       "      <td>0.917713</td>\n",
       "      <td>0.793832</td>\n",
       "      <td>0.310631</td>\n",
       "      <td>1.541964</td>\n",
       "      <td>-0.082523</td>\n",
       "      <td>-1.346811</td>\n",
       "      <td>0.095824</td>\n",
       "      <td>...</td>\n",
       "      <td>1.682762</td>\n",
       "      <td>-0.872293</td>\n",
       "      <td>1.908597</td>\n",
       "      <td>0.977152</td>\n",
       "      <td>-0.835005</td>\n",
       "      <td>1.128618</td>\n",
       "      <td>0.834068</td>\n",
       "      <td>1.852117</td>\n",
       "      <td>-2.522386</td>\n",
       "      <td>-0.053387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lord</th>\n",
       "      <td>1.694633</td>\n",
       "      <td>-0.650949</td>\n",
       "      <td>-0.095796</td>\n",
       "      <td>0.950002</td>\n",
       "      <td>0.813837</td>\n",
       "      <td>1.538206</td>\n",
       "      <td>1.125482</td>\n",
       "      <td>-1.655581</td>\n",
       "      <td>-1.352673</td>\n",
       "      <td>0.409504</td>\n",
       "      <td>...</td>\n",
       "      <td>1.553925</td>\n",
       "      <td>-0.819261</td>\n",
       "      <td>1.086127</td>\n",
       "      <td>-1.545129</td>\n",
       "      <td>-0.035251</td>\n",
       "      <td>1.895598</td>\n",
       "      <td>2.378903</td>\n",
       "      <td>-1.632835</td>\n",
       "      <td>1.375105</td>\n",
       "      <td>0.599096</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>thou</th>\n",
       "      <td>-1.590623</td>\n",
       "      <td>-0.801968</td>\n",
       "      <td>1.659041</td>\n",
       "      <td>1.314925</td>\n",
       "      <td>-0.455822</td>\n",
       "      <td>1.733872</td>\n",
       "      <td>-0.233771</td>\n",
       "      <td>-0.638922</td>\n",
       "      <td>0.104744</td>\n",
       "      <td>0.490223</td>\n",
       "      <td>...</td>\n",
       "      <td>0.652781</td>\n",
       "      <td>-0.362778</td>\n",
       "      <td>-0.190355</td>\n",
       "      <td>0.040719</td>\n",
       "      <td>-1.988184</td>\n",
       "      <td>2.330042</td>\n",
       "      <td>1.441790</td>\n",
       "      <td>-1.771272</td>\n",
       "      <td>-1.738142</td>\n",
       "      <td>-3.210077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>thy</th>\n",
       "      <td>0.386488</td>\n",
       "      <td>-0.834605</td>\n",
       "      <td>0.585985</td>\n",
       "      <td>0.801969</td>\n",
       "      <td>-0.165132</td>\n",
       "      <td>0.999917</td>\n",
       "      <td>1.224088</td>\n",
       "      <td>-0.317555</td>\n",
       "      <td>-0.671106</td>\n",
       "      <td>-1.073181</td>\n",
       "      <td>...</td>\n",
       "      <td>1.267184</td>\n",
       "      <td>-0.564660</td>\n",
       "      <td>0.089618</td>\n",
       "      <td>-0.979835</td>\n",
       "      <td>-0.215604</td>\n",
       "      <td>2.189568</td>\n",
       "      <td>0.529003</td>\n",
       "      <td>-1.682130</td>\n",
       "      <td>-0.632460</td>\n",
       "      <td>0.578122</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 100 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             0         1         2         3         4         5         6   \\\n",
       "shall -1.183386 -2.866214  1.046431  0.943265 -1.021784 -0.047069  2.108584   \n",
       "unto  -1.725262 -1.765972  1.411971  0.917713  0.793832  0.310631  1.541964   \n",
       "lord   1.694633 -0.650949 -0.095796  0.950002  0.813837  1.538206  1.125482   \n",
       "thou  -1.590623 -0.801968  1.659041  1.314925 -0.455822  1.733872 -0.233771   \n",
       "thy    0.386488 -0.834605  0.585985  0.801969 -0.165132  0.999917  1.224088   \n",
       "\n",
       "             7         8         9     ...           90        91        92  \\\n",
       "shall -0.458692 -1.698881  0.905800    ...     0.655786  0.703828  0.821803   \n",
       "unto  -0.082523 -1.346811  0.095824    ...     1.682762 -0.872293  1.908597   \n",
       "lord  -1.655581 -1.352673  0.409504    ...     1.553925 -0.819261  1.086127   \n",
       "thou  -0.638922  0.104744  0.490223    ...     0.652781 -0.362778 -0.190355   \n",
       "thy   -0.317555 -0.671106 -1.073181    ...     1.267184 -0.564660  0.089618   \n",
       "\n",
       "             93        94        95        96        97        98        99  \n",
       "shall -0.093732 -2.474536  2.309505  0.713962 -0.175176  0.262700  0.818652  \n",
       "unto   0.977152 -0.835005  1.128618  0.834068  1.852117 -2.522386 -0.053387  \n",
       "lord  -1.545129 -0.035251  1.895598  2.378903 -1.632835  1.375105  0.599096  \n",
       "thou   0.040719 -1.988184  2.330042  1.441790 -1.771272 -1.738142 -3.210077  \n",
       "thy   -0.979835 -0.215604  2.189568  0.529003 -1.682130 -0.632460  0.578122  \n",
       "\n",
       "[5 rows x 100 columns]"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights = cbow.get_weights()[0]\n",
    "weights = weights[1:]\n",
    "print(weights.shape)\n",
    "\n",
    "pd.DataFrame(weights, index=list(id2word.values())[1:]).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build a distance matrix to view the most similar words (contextually)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12424, 12424)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'egypt': ['destroy', 'none', 'whole', 'jacob', 'sea'],\n",
       " 'famine': ['wickedness', 'sore', 'countries', 'cease', 'portion'],\n",
       " 'god': ['therefore', 'heard', 'may', 'behold', 'heaven'],\n",
       " 'gospel': ['church', 'fowls', 'churches', 'preached', 'doctrine'],\n",
       " 'jesus': ['law', 'heard', 'world', 'many', 'dead'],\n",
       " 'john': ['dream', 'bones', 'held', 'present', 'alive'],\n",
       " 'moses': ['pharaoh', 'gate', 'jews', 'departed', 'lifted'],\n",
       " 'noah': ['abram', 'plagues', 'hananiah', 'korah', 'sarah']}"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics.pairwise import euclidean_distances\n",
    "\n",
    "# compute pairwise distance matrix\n",
    "distance_matrix = euclidean_distances(weights)\n",
    "print(distance_matrix.shape)\n",
    "\n",
    "# view contextually similar words\n",
    "similar_words = {search_term: [id2word[idx] for idx in distance_matrix[word2id[search_term]-1].argsort()[1:6]+1] \n",
    "                   for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n",
    "\n",
    "similar_words"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Implementing a word2vec model using a skip-gram neural network architecture"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build Vocabulary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vocabulary Size: 12425\n",
      "Vocabulary Sample: [('perceived', 1460), ('flagon', 7287), ('gardener', 11641), ('named', 973), ('remain', 732), ('sticketh', 10622), ('abstinence', 11848), ('rufus', 8190), ('adversary', 2018), ('jehoiachin', 3189)]\n"
     ]
    }
   ],
   "source": [
    "from keras.preprocessing import text\n",
    "\n",
    "tokenizer = text.Tokenizer()\n",
    "tokenizer.fit_on_texts(norm_bible)\n",
    "\n",
    "word2id = tokenizer.word_index\n",
    "id2word = {v:k for k, v in word2id.items()}\n",
    "\n",
    "vocab_size = len(word2id) + 1 \n",
    "embed_size = 100\n",
    "\n",
    "wids = [[word2id[w] for w in text.text_to_word_sequence(doc)] for doc in norm_bible]\n",
    "print('Vocabulary Size:', vocab_size)\n",
    "print('Vocabulary Sample:', list(word2id.items())[:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build and View sample skip grams ((word1, word2) -> relevancy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(james (1154), king (13)) -> 1\n",
      "(king (13), james (1154)) -> 1\n",
      "(james (1154), perform (1249)) -> 0\n",
      "(bible (5766), dismissed (6274)) -> 0\n",
      "(king (13), alter (5275)) -> 0\n",
      "(james (1154), bible (5766)) -> 1\n",
      "(king (13), bible (5766)) -> 1\n",
      "(bible (5766), king (13)) -> 1\n",
      "(king (13), compassion (1279)) -> 0\n",
      "(james (1154), foreskins (4844)) -> 0\n"
     ]
    }
   ],
   "source": [
    "from keras.preprocessing.sequence import skipgrams\n",
    "\n",
    "# generate skip-grams\n",
    "skip_grams = [skipgrams(wid, vocabulary_size=vocab_size, window_size=10) for wid in wids]\n",
    "\n",
    "# view sample skip-grams\n",
    "pairs, labels = skip_grams[0][0], skip_grams[0][1]\n",
    "for i in range(10):\n",
    "    print(\"({:s} ({:d}), {:s} ({:d})) -> {:d}\".format(\n",
    "          id2word[pairs[i][0]], pairs[i][0], \n",
    "          id2word[pairs[i][1]], pairs[i][1], \n",
    "          labels[i]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build Skip-gram Deep Network Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "merge_3 (Merge)              (None, 1)                 0         \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 1)                 2         \n",
      "=================================================================\n",
      "Total params: 2,485,002\n",
      "Trainable params: 2,485,002\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Program Files\\Anaconda3\\lib\\site-packages\\ipykernel\\__main__.py:19: UserWarning: The `Merge` layer is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.\n"
     ]
    }
   ],
   "source": [
    "from keras.layers import Merge\n",
    "from keras.layers.core import Dense, Reshape\n",
    "from keras.layers.embeddings import Embedding\n",
    "from keras.models import Sequential\n",
    "\n",
    "word_model = Sequential()\n",
    "word_model.add(Embedding(vocab_size, embed_size,\n",
    "                         embeddings_initializer=\"glorot_uniform\",\n",
    "                         input_length=1))\n",
    "word_model.add(Reshape((embed_size, )))\n",
    "\n",
    "context_model = Sequential()\n",
    "context_model.add(Embedding(vocab_size, embed_size,\n",
    "                  embeddings_initializer=\"glorot_uniform\",\n",
    "                  input_length=1))\n",
    "context_model.add(Reshape((embed_size,)))\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Merge([word_model, context_model], mode=\"dot\"))\n",
    "model.add(Dense(1, kernel_initializer=\"glorot_uniform\", activation=\"sigmoid\"))\n",
    "model.compile(loss=\"mean_squared_error\", optimizer=\"rmsprop\")\n",
    "print(model.summary())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg height=\"387pt\" viewBox=\"0.00 0.00 494.00 387.00\" width=\"494pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 383)\">\n",
       "<title>G</title>\n",
       "<polygon fill=\"white\" points=\"-4,4 -4,-383 490,-383 490,4 -4,4\" stroke=\"none\"/>\n",
       "<!-- 2188435364272 -->\n",
       "<g class=\"node\" id=\"node1\"><title>2188435364272</title>\n",
       "<polygon fill=\"none\" points=\"15.5,-332.5 15.5,-378.5 218.5,-378.5 218.5,-332.5 15.5,-332.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"54\" y=\"-351.8\">InputLayer</text>\n",
       "<polyline fill=\"none\" points=\"92.5,-332.5 92.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"120.5\" y=\"-363.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"92.5,-355.5 148.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"120.5\" y=\"-340.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"148.5,-332.5 148.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183.5\" y=\"-363.3\">(None, 1)</text>\n",
       "<polyline fill=\"none\" points=\"148.5,-355.5 218.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"183.5\" y=\"-340.3\">(None, 1)</text>\n",
       "</g>\n",
       "<!-- 2188435361632 -->\n",
       "<g class=\"node\" id=\"node3\"><title>2188435361632</title>\n",
       "<polygon fill=\"none\" points=\"0,-249.5 0,-295.5 234,-295.5 234,-249.5 0,-249.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"40\" y=\"-268.8\">Embedding</text>\n",
       "<polyline fill=\"none\" points=\"80,-249.5 80,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"108\" y=\"-280.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"80,-272.5 136,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"108\" y=\"-257.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"136,-249.5 136,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"185\" y=\"-280.3\">(None, 1)</text>\n",
       "<polyline fill=\"none\" points=\"136,-272.5 234,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"185\" y=\"-257.3\">(None, 1, 100)</text>\n",
       "</g>\n",
       "<!-- 2188435364272&#45;&gt;2188435361632 -->\n",
       "<g class=\"edge\" id=\"edge1\"><title>2188435364272-&gt;2188435361632</title>\n",
       "<path d=\"M117,-332.366C117,-324.152 117,-314.658 117,-305.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"120.5,-305.607 117,-295.607 113.5,-305.607 120.5,-305.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188435394912 -->\n",
       "<g class=\"node\" id=\"node2\"><title>2188435394912</title>\n",
       "<polygon fill=\"none\" points=\"267.5,-332.5 267.5,-378.5 470.5,-378.5 470.5,-332.5 267.5,-332.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"306\" y=\"-351.8\">InputLayer</text>\n",
       "<polyline fill=\"none\" points=\"344.5,-332.5 344.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"372.5\" y=\"-363.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"344.5,-355.5 400.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"372.5\" y=\"-340.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"400.5,-332.5 400.5,-378.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"435.5\" y=\"-363.3\">(None, 1)</text>\n",
       "<polyline fill=\"none\" points=\"400.5,-355.5 470.5,-355.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"435.5\" y=\"-340.3\">(None, 1)</text>\n",
       "</g>\n",
       "<!-- 2188435394856 -->\n",
       "<g class=\"node\" id=\"node4\"><title>2188435394856</title>\n",
       "<polygon fill=\"none\" points=\"252,-249.5 252,-295.5 486,-295.5 486,-249.5 252,-249.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"292\" y=\"-268.8\">Embedding</text>\n",
       "<polyline fill=\"none\" points=\"332,-249.5 332,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"360\" y=\"-280.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"332,-272.5 388,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"360\" y=\"-257.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"388,-249.5 388,-295.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"437\" y=\"-280.3\">(None, 1)</text>\n",
       "<polyline fill=\"none\" points=\"388,-272.5 486,-272.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"437\" y=\"-257.3\">(None, 1, 100)</text>\n",
       "</g>\n",
       "<!-- 2188435394912&#45;&gt;2188435394856 -->\n",
       "<g class=\"edge\" id=\"edge2\"><title>2188435394912-&gt;2188435394856</title>\n",
       "<path d=\"M369,-332.366C369,-324.152 369,-314.658 369,-305.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"372.5,-305.607 369,-295.607 365.5,-305.607 372.5,-305.607\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188434920000 -->\n",
       "<g class=\"node\" id=\"node5\"><title>2188434920000</title>\n",
       "<polygon fill=\"none\" points=\"14.5,-166.5 14.5,-212.5 233.5,-212.5 233.5,-166.5 14.5,-166.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"47\" y=\"-185.8\">Reshape</text>\n",
       "<polyline fill=\"none\" points=\"79.5,-166.5 79.5,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"107.5\" y=\"-197.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"79.5,-189.5 135.5,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"107.5\" y=\"-174.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"135.5,-166.5 135.5,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"184.5\" y=\"-197.3\">(None, 1, 100)</text>\n",
       "<polyline fill=\"none\" points=\"135.5,-189.5 233.5,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"184.5\" y=\"-174.3\">(None, 100)</text>\n",
       "</g>\n",
       "<!-- 2188435361632&#45;&gt;2188434920000 -->\n",
       "<g class=\"edge\" id=\"edge3\"><title>2188435361632-&gt;2188434920000</title>\n",
       "<path d=\"M118.913,-249.366C119.623,-241.152 120.443,-231.658 121.215,-222.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"124.715,-222.871 122.09,-212.607 117.741,-222.268 124.715,-222.871\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188435396816 -->\n",
       "<g class=\"node\" id=\"node6\"><title>2188435396816</title>\n",
       "<polygon fill=\"none\" points=\"255.5,-166.5 255.5,-212.5 474.5,-212.5 474.5,-166.5 255.5,-166.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"288\" y=\"-185.8\">Reshape</text>\n",
       "<polyline fill=\"none\" points=\"320.5,-166.5 320.5,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"348.5\" y=\"-197.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"320.5,-189.5 376.5,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"348.5\" y=\"-174.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"376.5,-166.5 376.5,-212.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"425.5\" y=\"-197.3\">(None, 1, 100)</text>\n",
       "<polyline fill=\"none\" points=\"376.5,-189.5 474.5,-189.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"425.5\" y=\"-174.3\">(None, 100)</text>\n",
       "</g>\n",
       "<!-- 2188435394856&#45;&gt;2188435396816 -->\n",
       "<g class=\"edge\" id=\"edge4\"><title>2188435394856-&gt;2188435396816</title>\n",
       "<path d=\"M367.907,-249.366C367.501,-241.152 367.032,-231.658 366.591,-222.725\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"370.081,-222.422 366.092,-212.607 363.089,-222.767 370.081,-222.422\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188435395248 -->\n",
       "<g class=\"node\" id=\"node7\"><title>2188435395248</title>\n",
       "<polygon fill=\"none\" points=\"106.5,-83.5 106.5,-129.5 381.5,-129.5 381.5,-83.5 106.5,-83.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"132.5\" y=\"-102.8\">Merge</text>\n",
       "<polyline fill=\"none\" points=\"158.5,-83.5 158.5,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"186.5\" y=\"-114.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"158.5,-106.5 214.5,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"186.5\" y=\"-91.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"214.5,-83.5 214.5,-129.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"298\" y=\"-114.3\">[(None, 100), (None, 100)]</text>\n",
       "<polyline fill=\"none\" points=\"214.5,-106.5 381.5,-106.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"298\" y=\"-91.3\">(None, 1)</text>\n",
       "</g>\n",
       "<!-- 2188434920000&#45;&gt;2188435395248 -->\n",
       "<g class=\"edge\" id=\"edge5\"><title>2188434920000-&gt;2188435395248</title>\n",
       "<path d=\"M156.791,-166.366C170.945,-156.812 187.662,-145.528 202.654,-135.409\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"204.919,-138.103 211.249,-129.607 201.002,-132.301 204.919,-138.103\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188435396816&#45;&gt;2188435395248 -->\n",
       "<g class=\"edge\" id=\"edge6\"><title>2188435396816-&gt;2188435395248</title>\n",
       "<path d=\"M331.936,-166.366C317.664,-156.812 300.807,-145.528 285.691,-135.409\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"287.281,-132.261 277.024,-129.607 283.387,-138.078 287.281,-132.261\" stroke=\"black\"/>\n",
       "</g>\n",
       "<!-- 2188435445688 -->\n",
       "<g class=\"node\" id=\"node8\"><title>2188435445688</title>\n",
       "<polygon fill=\"none\" points=\"155.5,-0.5 155.5,-46.5 332.5,-46.5 332.5,-0.5 155.5,-0.5\" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"181\" y=\"-19.8\">Dense</text>\n",
       "<polyline fill=\"none\" points=\"206.5,-0.5 206.5,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-31.3\">input:</text>\n",
       "<polyline fill=\"none\" points=\"206.5,-23.5 262.5,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"234.5\" y=\"-8.3\">output:</text>\n",
       "<polyline fill=\"none\" points=\"262.5,-0.5 262.5,-46.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"297.5\" y=\"-31.3\">(None, 1)</text>\n",
       "<polyline fill=\"none\" points=\"262.5,-23.5 332.5,-23.5 \" stroke=\"black\"/>\n",
       "<text font-family=\"Times New Roman,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"297.5\" y=\"-8.3\">(None, 1)</text>\n",
       "</g>\n",
       "<!-- 2188435395248&#45;&gt;2188435445688 -->\n",
       "<g class=\"edge\" id=\"edge7\"><title>2188435395248-&gt;2188435445688</title>\n",
       "<path d=\"M244,-83.3664C244,-75.1516 244,-65.6579 244,-56.7252\" fill=\"none\" stroke=\"black\"/>\n",
       "<polygon fill=\"black\" points=\"247.5,-56.6068 244,-46.6068 240.5,-56.6069 247.5,-56.6068\" stroke=\"black\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import SVG\n",
    "from keras.utils.vis_utils import model_to_dot\n",
    "\n",
    "SVG(model_to_dot(model, show_shapes=True, show_layer_names=False, \n",
    "                 rankdir='TB').create(prog='dot', format='svg'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train the model for 5 epochs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processed 0 (skip_first, skip_second, relevance) pairs\n",
      "Processed 10000 (skip_first, skip_second, relevance) pairs\n",
      "Processed 20000 (skip_first, skip_second, relevance) pairs\n",
      "Epoch: 1 Loss: 4529.63803683\n",
      "Processed 0 (skip_first, skip_second, relevance) pairs\n",
      "Processed 10000 (skip_first, skip_second, relevance) pairs\n",
      "Processed 20000 (skip_first, skip_second, relevance) pairs\n",
      "Epoch: 2 Loss: 3750.71884749\n",
      "Processed 0 (skip_first, skip_second, relevance) pairs\n",
      "Processed 10000 (skip_first, skip_second, relevance) pairs\n",
      "Processed 20000 (skip_first, skip_second, relevance) pairs\n",
      "Epoch: 3 Loss: 3752.47489296\n",
      "Processed 0 (skip_first, skip_second, relevance) pairs\n",
      "Processed 10000 (skip_first, skip_second, relevance) pairs\n",
      "Processed 20000 (skip_first, skip_second, relevance) pairs\n",
      "Epoch: 4 Loss: 3793.9177565\n",
      "Processed 0 (skip_first, skip_second, relevance) pairs\n",
      "Processed 10000 (skip_first, skip_second, relevance) pairs\n",
      "Processed 20000 (skip_first, skip_second, relevance) pairs\n",
      "Epoch: 5 Loss: 3716.07605051\n"
     ]
    }
   ],
   "source": [
    "for epoch in range(1, 6):\n",
    "    loss = 0\n",
    "    for i, elem in enumerate(skip_grams):\n",
    "        pair_first_elem = np.array(list(zip(*elem[0]))[0], dtype='int32')\n",
    "        pair_second_elem = np.array(list(zip(*elem[0]))[1], dtype='int32')\n",
    "        labels = np.array(elem[1], dtype='int32')\n",
    "        X = [pair_first_elem, pair_second_elem]\n",
    "        Y = labels\n",
    "        if i % 10000 == 0:\n",
    "            print('Processed {} (skip_first, skip_second, relevance) pairs'.format(i))\n",
    "        loss += model.train_on_batch(X,Y)  \n",
    "\n",
    "    print('Epoch:', epoch, 'Loss:', loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12424, 100)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>90</th>\n",
       "      <th>91</th>\n",
       "      <th>92</th>\n",
       "      <th>93</th>\n",
       "      <th>94</th>\n",
       "      <th>95</th>\n",
       "      <th>96</th>\n",
       "      <th>97</th>\n",
       "      <th>98</th>\n",
       "      <th>99</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>shall</th>\n",
       "      <td>-0.002272</td>\n",
       "      <td>0.015870</td>\n",
       "      <td>0.018349</td>\n",
       "      <td>0.022802</td>\n",
       "      <td>0.028364</td>\n",
       "      <td>-0.040064</td>\n",
       "      <td>-0.013263</td>\n",
       "      <td>0.136607</td>\n",
       "      <td>0.019667</td>\n",
       "      <td>0.033407</td>\n",
       "      <td>...</td>\n",
       "      <td>0.037663</td>\n",
       "      <td>-0.087140</td>\n",
       "      <td>0.073169</td>\n",
       "      <td>-0.028257</td>\n",
       "      <td>0.085751</td>\n",
       "      <td>0.299031</td>\n",
       "      <td>0.123512</td>\n",
       "      <td>0.082310</td>\n",
       "      <td>0.243142</td>\n",
       "      <td>0.076125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unto</th>\n",
       "      <td>0.034425</td>\n",
       "      <td>-0.102070</td>\n",
       "      <td>0.018051</td>\n",
       "      <td>0.017960</td>\n",
       "      <td>0.172954</td>\n",
       "      <td>-0.115672</td>\n",
       "      <td>-0.012632</td>\n",
       "      <td>0.096919</td>\n",
       "      <td>-0.049203</td>\n",
       "      <td>-0.040344</td>\n",
       "      <td>...</td>\n",
       "      <td>0.106373</td>\n",
       "      <td>-0.075703</td>\n",
       "      <td>0.013888</td>\n",
       "      <td>-0.134224</td>\n",
       "      <td>0.132703</td>\n",
       "      <td>0.369338</td>\n",
       "      <td>0.149259</td>\n",
       "      <td>-0.031616</td>\n",
       "      <td>-0.069929</td>\n",
       "      <td>-0.136505</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lord</th>\n",
       "      <td>0.051990</td>\n",
       "      <td>-0.113865</td>\n",
       "      <td>0.007226</td>\n",
       "      <td>0.031754</td>\n",
       "      <td>0.052963</td>\n",
       "      <td>-0.094523</td>\n",
       "      <td>-0.067664</td>\n",
       "      <td>0.001706</td>\n",
       "      <td>-0.112827</td>\n",
       "      <td>-0.078586</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.041636</td>\n",
       "      <td>0.053685</td>\n",
       "      <td>0.041299</td>\n",
       "      <td>-0.026255</td>\n",
       "      <td>0.087085</td>\n",
       "      <td>0.253801</td>\n",
       "      <td>0.003064</td>\n",
       "      <td>0.128984</td>\n",
       "      <td>0.157639</td>\n",
       "      <td>-0.174654</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>thou</th>\n",
       "      <td>-0.152183</td>\n",
       "      <td>-0.073681</td>\n",
       "      <td>-0.091472</td>\n",
       "      <td>0.022033</td>\n",
       "      <td>0.008415</td>\n",
       "      <td>-0.048438</td>\n",
       "      <td>-0.041181</td>\n",
       "      <td>0.082019</td>\n",
       "      <td>0.004648</td>\n",
       "      <td>0.044870</td>\n",
       "      <td>...</td>\n",
       "      <td>0.101531</td>\n",
       "      <td>-0.018404</td>\n",
       "      <td>-0.070462</td>\n",
       "      <td>-0.041363</td>\n",
       "      <td>0.422717</td>\n",
       "      <td>0.320975</td>\n",
       "      <td>0.026026</td>\n",
       "      <td>0.179628</td>\n",
       "      <td>-0.026965</td>\n",
       "      <td>-0.151183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>thy</th>\n",
       "      <td>-0.257579</td>\n",
       "      <td>-0.023008</td>\n",
       "      <td>0.053303</td>\n",
       "      <td>0.013690</td>\n",
       "      <td>-0.083293</td>\n",
       "      <td>0.034279</td>\n",
       "      <td>0.078811</td>\n",
       "      <td>0.079851</td>\n",
       "      <td>-0.015215</td>\n",
       "      <td>-0.111211</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.064527</td>\n",
       "      <td>0.112085</td>\n",
       "      <td>0.061625</td>\n",
       "      <td>0.026398</td>\n",
       "      <td>0.164085</td>\n",
       "      <td>0.228056</td>\n",
       "      <td>0.031343</td>\n",
       "      <td>-0.009061</td>\n",
       "      <td>0.043006</td>\n",
       "      <td>-0.120782</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 100 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             0         1         2         3         4         5         6   \\\n",
       "shall -0.002272  0.015870  0.018349  0.022802  0.028364 -0.040064 -0.013263   \n",
       "unto   0.034425 -0.102070  0.018051  0.017960  0.172954 -0.115672 -0.012632   \n",
       "lord   0.051990 -0.113865  0.007226  0.031754  0.052963 -0.094523 -0.067664   \n",
       "thou  -0.152183 -0.073681 -0.091472  0.022033  0.008415 -0.048438 -0.041181   \n",
       "thy   -0.257579 -0.023008  0.053303  0.013690 -0.083293  0.034279  0.078811   \n",
       "\n",
       "             7         8         9     ...           90        91        92  \\\n",
       "shall  0.136607  0.019667  0.033407    ...     0.037663 -0.087140  0.073169   \n",
       "unto   0.096919 -0.049203 -0.040344    ...     0.106373 -0.075703  0.013888   \n",
       "lord   0.001706 -0.112827 -0.078586    ...    -0.041636  0.053685  0.041299   \n",
       "thou   0.082019  0.004648  0.044870    ...     0.101531 -0.018404 -0.070462   \n",
       "thy    0.079851 -0.015215 -0.111211    ...    -0.064527  0.112085  0.061625   \n",
       "\n",
       "             93        94        95        96        97        98        99  \n",
       "shall -0.028257  0.085751  0.299031  0.123512  0.082310  0.243142  0.076125  \n",
       "unto  -0.134224  0.132703  0.369338  0.149259 -0.031616 -0.069929 -0.136505  \n",
       "lord  -0.026255  0.087085  0.253801  0.003064  0.128984  0.157639 -0.174654  \n",
       "thou  -0.041363  0.422717  0.320975  0.026026  0.179628 -0.026965 -0.151183  \n",
       "thy    0.026398  0.164085  0.228056  0.031343 -0.009061  0.043006 -0.120782  \n",
       "\n",
       "[5 rows x 100 columns]"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "merge_layer = model.layers[0]\n",
    "word_model = merge_layer.layers[0]\n",
    "word_embed_layer = word_model.layers[0]\n",
    "weights = word_embed_layer.get_weights()[0][1:]\n",
    "\n",
    "print(weights.shape)\n",
    "pd.DataFrame(weights, index=id2word.values()).head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build a distance matrix to view the most similar words (contextually)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(12424, 12424)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'egypt': ['pharaoh', 'mighty', 'houses', 'kept', 'possess'],\n",
       " 'famine': ['rivers', 'foot', 'pestilence', 'wash', 'sabbaths'],\n",
       " 'god': ['evil', 'iniquity', 'none', 'mighty', 'mercy'],\n",
       " 'gospel': ['grace', 'shame', 'believed', 'verily', 'everlasting'],\n",
       " 'jesus': ['christ', 'faith', 'disciples', 'dead', 'say'],\n",
       " 'john': ['ghost', 'knew', 'peter', 'alone', 'master'],\n",
       " 'moses': ['commanded', 'offerings', 'kept', 'presence', 'lamb'],\n",
       " 'noah': ['flood', 'shem', 'peleg', 'abram', 'chose']}"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics.pairwise import euclidean_distances\n",
    "\n",
    "distance_matrix = euclidean_distances(weights)\n",
    "print(distance_matrix.shape)\n",
    "\n",
    "similar_words = {search_term: [id2word[idx] for idx in distance_matrix[word2id[search_term]-1].argsort()[1:6]+1] \n",
    "                   for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n",
    "\n",
    "similar_words"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualize word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total words: 48 \tWord Embedding shapes: (48, 100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nj48PkydPZuHChWRnZxMfH4+npyfe3t4sWLCAwYMHc+TIEYKCgvDy8qJPnz783//9X2m8RSJyEy6v\nub3S5S0aevfuTWJiIklJSSQkJBAQEEBISAhpaWls2LCBkydP4ufnZ71u/fr19OzZ86rR6z59+rBz\n506Sk5Px9/cHwMXFhaSkJJtJvoBpmrf9H9AM+OqK568BrxVV3tfX1ywL5sfGms4NGpqGnZ3p3KCh\nOT821jx48KBZv359a5l33nnHjI6ONh944AHrsfT0dNPb29s0TdNs3bq1uX79etM0TfPHH38069Wr\nZ5qmaT722GNmgwYNTE9PT9PT09N0dHQ0v/rqq9vYO7FlCxcuNPv37299fvr0afPEiRPW53369DE/\n++wz0zTzfoYvl/3uu+9MNzc30zRN88033zQtFot54cIF89ixY+b9999vHjlyxMzKyjLPnDljmqZp\nHjt2zKxXr56Zm5trHjx40HqtaZrmmjVrzKpVq5qHDx82c3JyzICAAHPdunXm8ePHTRcXFzM3N9c0\nTdM8derUrX0z7iIHDx40GzZsaIaEhJiurq7mY489Zp4/f97cvn272apVK9PHx8fs2LGj+b///c80\nTdMMCwszP/30U9M0zSLLbN261fTw8DA9PT3NV155pcD/Q1vm3KCh6Rc+yuwYs8L6zy98lPmAo3OR\n71HlypVN0zTNs2fPmm3btjW9vb1Nd3d3c+nSpaZp/v7/LywszGzQoIEZEhJifv3112bz5s3N+vXr\nm1u2bDFNM+93r0+fPmZAQIBZv359c/r06ben03JXe//9901XV1czJCTkT123Zs0ac8OGDbeoVbZr\nfmysWf2vdUy/8FFm+zeXmn7ho8zqf61jzo+NLbT8yy+/bHp6epoNGzY0Bw0aZP0MjYiIMOvVq2f+\nP3t3Hl/Tnfh//HUStPalaFGDqDW7xBKxq12p0tGGqaUrQ1s62qJBU/Vtv0xNbTWdKWokv9qX+mqr\nthJaJBFBRGyh1Y4GjQZVJJ/fH5HThNzYQsJ5Px+PPB65537O537OvVec9zmfZd++fdnKt2zZ0mzf\nvv22H8edAESZm8wo+XXHaDtQy7KsGpZlFQGeAlbkU1uuS279x++77z67nLu7+zVn8cgs7+7uzqVL\nlwBc9hcXuRO8vb35+uuveeONN9i0aROlS5dm/fr1NG7cGG9vb9atW8eePXvs8q5mrunevTtFixal\n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\nERERERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERER\nERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERERERHHUzASERERERHH\nUzASERERERHHUzASEbkFU6ZMoV69elSpUoUhQ4bkSZ0lSpTIk3pERETk+hXK7waIiNzNZsyYwZo1\na1izZg1RUVH53RwRERG5Sbd0x8iyrImWZSVYlhVnWdZSy7LKZHlupGVZByzL2mdZVocs2zte3nbA\nsqw3b+X1RUTy00svvcShQ4fo1KkTv/zyi709KSmJNm3a4OPjQ9u2bTl69Giu2w8fPkxQUBDe3t68\n9dZb+XIsIiIiTnerXem+BryMMT5AIjASwLKs+sBTgCfQEZhhWZa7ZVnuwHSgE1AfePpyWRGRu87M\nmTOpXLky69evp2zZsvb2oUOH0q9fP+Li4ujTpw8vv/xyrttfeeUVBg0axK5du6hUqVK+HIuIiIjT\n3VIwMsasNsZcuvzwO+Dhy793Bz4zxvxujDkMHAAaXf45YIw5ZIy5AHx2uayIyD3j22+/JSQkBIC/\n/OUvREZG5rp98+bNPP300/Z2ERERufPycvKFgcAXl3+vAnyf5bkfLm9ztf0qlmW9YFlWlGVZUcnJ\nyXnYTBGRmxMeEUHN2nVxc3enZu26hEdE5FndlmXlWV0iIiJy464ZjCzLWmNZ1u4cfrpnKTMauASE\n51XDjDEfG2MCjTGBFSpUyKtqRURuSnhEBEOGjaBccD/ahi6hXHA/hgwbwdmzZ68q27RpUz777LOM\n/cLDad68ea7bg4ODs20XERGRO++awcgY86gxxiuHn+UAlmX1B7oCfYwx5vJux4CqWap5+PI2V9tF\nRAq0MePCeKTzEMp5+ODmXohyHj480nkIKSkpV5WdOnUqs2fPxsfHh//85z98+OGHuW7/8MMPmT59\nOt7e3hw7pj+JIiIi+cH6I8vcxM6W1RH4AGhpjEnOst0TiCBjTFFlYC1QC7DImKShLRmBaDsQYozZ\nk9vrBAYGGk2DKyL5yc3dnbahS3Bz/2OVg/S0S6x95wnS09LysWUiIiKSybKsaGNM4M3se6tjjKYB\nJYGvLcuKtSxrJsDloLMAiAe+BP5qjEm7PFHDEOArYC+w4FqhSESkIKhRsxYpR+KzbUs5Ek+NmrXy\nqUUiIiKSl25pgVdjzCO5PPcu8G4O21cBq27ldUVE7rSwcWMYMmwEj3QeQplq9Uk5Es+BVdOYNnli\nfjdNRERE8sAtBSMREafoc3ma7THjwoieu58aNWsxbfJEe7uIiIjc3W5pjNGdojFGIiIiIiJyLfk5\nxkhEREREROSup2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2Ak\nIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIi\nIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKO\np2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2Ak\nIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIi\nIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKO\np2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2Ak\nIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIi\nIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKO\np2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2Ak\nIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOp2AkIiIiIiKOlyfByLKs1yzLMpZllb/82LIsa4plWQcs\ny4qzLKtBlrL9LMvaf/mnX168voiIiIiIyK0odKsVWJZVFWgPHM2yuRNQ6/JPY+AjoLFlWeWAsUAg\nYIBoy7JWGGN+udV2iIiIiIiI3Ky8uGM0GXidjKCTqTsw12T4DihjWVYloAPwtTHm1OUw9DXQMQ/a\nICIiIiIictNuKRhZltUdOGaM2XnFU1WA77M8/uHyNlfbc6r7BcuyoizLikpOTr6VZoqIiIiIiOTq\nml3pLMtaAzyUw1OjgVFkdKPLc8aYj4GPAQIDA801iouIiIiIiNy0awYjY8yjOW23LMsbqAHstCwL\n4GEgxrKsRsAxoGqW4g9f3nYMaHXF9g030W4REREREZE8c9Nd6Ywxu4wxFY0x1Y0x1cnoFtfAGPNf\nYAXwzOXZ6ZoAp40xPwFfAe0tyyprWVZZMu42fXXrhyEiIiIiInLzbnlWOhdWAZ2BA8A5YACAMeaU\nZVnvANsvlwszxpy6TW0QERERERG5LnkWjC7fNcr83QB/dVFuFjArr15XRERERETkVuXJAq8iIiIi\nIiJ3MwUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFx\nPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUj\nERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERER\nERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFx\nPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUj\nERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERER\nERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERERFx\nPAUjERERERFxPAUjERERERFxPAUjERERERFxPAUjERERKdCqV6/OiRMn8rsZInKPUzASERERERHH\nUzASERGRAuPs2bN06dIFX19fvLy8mD9/PgBTp06lQYMGeHt7k5CQYJcdOHAgjRo1wt/fn+XLlwMw\nZ84cHn/8cdq1a0f16tWZNm0aH3zwAf7+/jRp0oRTp07l2/GJSMGlYCQiIiIFxpdffknlypXZuXMn\nu3fvpmPHjgCUL1+emJgYBg0axKRJkwB49913adOmDdu2bWP9+vWMGDGCs2fPArB7926WLFnC9u3b\nGT16NMWKFWPHjh0EBQUxd+7cfDs+ESm4FIxERESkwPD29ubrr7/mjTfeYNOmTZQuXRqAJ554AoCA\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f921460f748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.manifold import TSNE\n",
    "\n",
    "words = sum([[k] + v for k, v in similar_words.items()], [])\n",
    "words_ids = [word2id[w] for w in words]\n",
    "word_vectors = np.array([weights[idx] for idx in words_ids])\n",
    "print('Total words:', len(words), '\\tWord Embedding shapes:', word_vectors.shape)\n",
    "\n",
    "tsne = TSNE(n_components=2, random_state=0, n_iter=10000, perplexity=3)\n",
    "np.set_printoptions(suppress=True)\n",
    "T = tsne.fit_transform(word_vectors)\n",
    "labels = words\n",
    "\n",
    "plt.figure(figsize=(14, 8))\n",
    "plt.scatter(T[:, 0], T[:, 1], c='steelblue', edgecolors='k')\n",
    "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n",
    "    plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Leveraging gensim for building a word2vec model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1065,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'egypt': ['pharaoh', 'egyptians', 'bondage', 'rod', 'flowing'],\n",
       " 'famine': ['pestilence', 'peril', 'blasting', 'mildew', 'morever'],\n",
       " 'god': ['lord', 'promised', 'worldly', 'glory', 'reasonable'],\n",
       " 'gospel': ['faith', 'afflictions', 'christ', 'persecutions', 'godly'],\n",
       " 'jesus': ['peter', 'messias', 'apostles', 'immediately', 'neverthless'],\n",
       " 'john': ['baptist', 'james', 'peter', 'galilee', 'zebedee'],\n",
       " 'moses': ['congregation', 'children', 'aaron', 'ordinance', 'doctor'],\n",
       " 'noah': ['shem', 'japheth', 'ham', 'noe', 'henoch']}"
      ]
     },
     "execution_count": 1065,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from gensim.models import word2vec\n",
    "\n",
    "# tokenize sentences in corpus\n",
    "wpt = nltk.WordPunctTokenizer()\n",
    "tokenized_corpus = [wpt.tokenize(document) for document in norm_bible]\n",
    "\n",
    "# Set values for various parameters\n",
    "feature_size = 100    # Word vector dimensionality  \n",
    "window_context = 30          # Context window size                                                                                    \n",
    "min_word_count = 1   # Minimum word count                        \n",
    "sample = 1e-3   # Downsample setting for frequent words\n",
    "\n",
    "w2v_model = word2vec.Word2Vec(tokenized_corpus, size=feature_size, \n",
    "                          window=window_context, min_count=min_word_count,\n",
    "                          sample=sample, iter=50)\n",
    "\n",
    "# view similar words based on gensim's model\n",
    "similar_words = {search_term: [item[0] for item in w2v_model.wv.most_similar([search_term], topn=5)]\n",
    "                  for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n",
    "similar_words"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualizing word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1080,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHVCAYAAAA3lfClAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtYVWX+///nAh3LE+poZaWifRUQOQkaggfUsay0PHYQ\nFTRzwMaaZnTUzGMxV038OmiWY6OYDkylppZTM2ZJSupHUZFAJbSQDo6RgaFocrh/f2zcgaKiAhvc\nr8d1ea297nWve73X3uq13/u+131bxhhERERERESchYujAxAREREREalJSoJERERERMSpKAkSERER\nERGnoiRIREREREScipIgERERERFxKkqCRERERETEqSgJEhERERERp6IkSEREREREnMo1J0GWZbWx\nLGuzZVn7LctKtyzrydLyFpZlfWxZVmbptnmZc2ZYlnXIsqwMy7LuvtYYREREREREKssyxlxbA5bV\nGmhtjNljWVYTYDcwBIgEfjLGPG9Z1nSguTFmmmVZnYF/Ad2BW4FNQCdjTPGlrtOyZUvj7u5+TbGK\niIiIiMj1a/fu3T8aY1pdrl69a72QMeYocLT0db5lWQeA24AHgLDSam8BicC00vK3jTG/AF9blnUI\nW0K0/VLXcXd3Jzk5+VrDFRERERGR65RlWUcqU69KnwmyLMsdCAD+D7i5NEEC+B9wc+nr24Bvypz2\nbWlZRe1NtCwr2bKs5JycnKoMVUREREREnFSVJUGWZTUG1gB/NMb8XPaYsY25u+Jxd8aYJcaYIGNM\nUKtWl+3VEhERERERuawqSYIsy6qPLQGKN8a8V1p8rPR5oXPPDf1QWv4d0KbM6beXlomIiIiIiFS7\nqpgdzgKWAgeMMS+VOfQ+EFH6OgJYX6b8YcuyGliW1R7oCOy81jhEREREREQq45onRgBCgTHAF5Zl\npZSWPQ08D7xrWdajwBHgQQBjTLplWe8C+4Ei4PHLzQwnIiIiIiJSVapidrgkwLrI4f4XOScGiLnW\na4uIiIiIiFypKp0dTkREREREpLZTEiQiIiIiIk5FSZCIiIiIiDgVJUHilLKysujSpcsF5WFhYSQn\nJ19xe+vWrWP//v32/dmzZ7Np06ZrilFEREREqoeSIJEqcH4SNH/+fH73u985MCIRERERuRglQeK0\nioqKCA8Px8vLixEjRlBQUFDueHR0NEFBQXh7ezNnzhx7+fTp0+ncuTO+vr5MmTKFbdu28f777zN1\n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\ncfLkSQC+++47fvjhB77//nsaNmzI6NGjmTp1Knv27Kn2271i82fCuALwBupBtwFwf7DBd+JE7rnn\nHnx8fHBzc+Ott95i6tSp+Pr6kpKSwuzZswGIi4vj8ccfx9/fH2PMRS9z//33c/LkSQ2FE5FaR88E\niYjI9afsl3ywbUeegX8cu+Rpc+fOZfz48fj6+tKwYUPeeustAF555RU2b95sH0Z3zz330KBBAw4c\nOECPHj0AaNy4Mf/85z85dOgQU6dOxcXFhfr16/PGG29U441epcxs8ChfNGUMzN1WTMF//0vv3r0J\nDAzE39+fHTt2XHB6YGBguUkR/va3vwEQFhZGWFiYvXzfvn34+fnh6elZLbchInK1rEv9glObBAUF\nmXOz1YiIiFySq4utB6jsT31F2BbhLS5xVFS1h6e7rXfM+9eiUTGw/3B9zrh3ICIighkzZlzTJZ5/\n/nneeOMN4uPj6dmz57XFKyJSSZZl7TbGBF22npIgERG57lTwJZ90YE07OJjlmJhqk3PDBccV2HqE\nMoC4hhC7RIsVi0idVtkkSM8EiYjI9Wd2jO1LfTq2HqB0bPuzYxwcWC0xKtyW8KxpZ+sdW9NOCZCI\nOBU9EyQiItefc1/m58+0Pf/SsS3ExuhLflmjwvV+iIjTUhIkIiLXJ33JFxGRi9BwOBERERERcSpK\ngkRERERExKkoCRIREREREaeiJEhERERERJyKkiAREREREXEqSoJERERERMSpKAkSERERERGnoiRI\nREREREScipIgERERERFxKkqCRERERETEqSgJEhERERERp6IkSEREREREnIqSIBERERERcSpKgkRE\nRERExKkoCRIREREREaeiJEhERERERJyKw5Igy7IGWpaVYVnWIcuypjsqDhERERERcS4OSYIsy3IF\nFgH3AJ2BRyzL6uyIWERERERExLk4qieoO3DIGPOVMeYs8DbwgINiERERERERJ+KoJOg24Jsy+9+W\nlolcUmJiItu2bbPvL168mBUrVjgwIoELPxcRERGR2qyeowO4FMuyJgITAdq2bevgaKQ2SExMpHHj\nxoSEhAAQFRXl4IgELvxcRERERGozR/UEfQe0KbN/e2lZOcaYJcaYIGNMUKtWrWosOLk2//znP+ne\nvTv+/v78/ve/p7i4mKVLl9KpUye6d+/OY489xh/+8Afy8/Np3749hYWFAPz888/2/bCwMJ588kn8\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x14d6c851b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.manifold import TSNE\n",
    "\n",
    "words = sum([[k] + v for k, v in similar_words.items()], [])\n",
    "wvs = w2v_model.wv[words]\n",
    "\n",
    "tsne = TSNE(n_components=2, random_state=0, n_iter=10000, perplexity=2)\n",
    "np.set_printoptions(suppress=True)\n",
    "T = tsne.fit_transform(wvs)\n",
    "labels = words\n",
    "\n",
    "plt.figure(figsize=(14, 8))\n",
    "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n",
    "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n",
    "    plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Applying the word2vec model on our sample corpus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "wpt = nltk.WordPunctTokenizer()\n",
    "tokenized_corpus = [wpt.tokenize(document) for document in norm_corpus]\n",
    "\n",
    "# Set values for various parameters\n",
    "feature_size = 10    # Word vector dimensionality  \n",
    "window_context = 10          # Context window size                                                                                    \n",
    "min_word_count = 1   # Minimum word count                        \n",
    "sample = 1e-3   # Downsample setting for frequent words\n",
    "\n",
    "w2v_model = word2vec.Word2Vec(tokenized_corpus, size=feature_size, \n",
    "                              window=window_context, min_count = min_word_count,\n",
    "                              sample=sample, iter=100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nFUmqmJz+TlLl0b9o3O7EcbBpa2FPdOrkr9qP0l/+8hcyMzNZvXo1O3fuJDk5mc6dO9OvXz/+/Oc/\nc9lll/Hll1/y1ltv8eijjzJ9+nTq1q3LypUr+eKLL+jQoQPdu3enUaNGJXiT5cPSpUsji9RcdNFF\nfPrpp3z22WfUqVOHJ554gs6dO/Pggw9y/vnnl3GlkhQ9uwEkVS79U2BjNhwoKHyNMkRDYVi8/vrr\niYmJoX79+nTp0oWVK1dy6aWXsnDhQr744gteffVVOnfuzA9+8APeeOMNZs6cSWJiIu3atePTTz9l\n06ZNJXZrRyonJ4du3brRunVr4uPjefHFF4HCHuXExEQSExNp1KgRF154IU899RS33npr5NwnnniC\n22677Zg+f82aNZx22ml8/PHHx3QdSSprBmlJKmE1atSga9euvP7668yZM4d+/foBhUNBHnroITIz\nM8nMzOSDDz6ge/fuZVLf888/z6pVq1i4cCH/+7//SxiG3HjjjWRmZrJy5UrOOeccfvGLX3Dttdfy\n0ksvsX//fgDS0tIYMmTIVxcrPi9301j4/HMAOnXqxKxZs4DCpdXr1atHnTp12LJlCw888ADvvPMO\nr776Km+//XYp370klRyDtCQdieKBMTcXZs+iU6dOzJkzhwMHDrBjxw4WL15M27ZtAejXrx9paWks\nWbKEnj17AtCjRw8effTRSCj917/+xedFwbM0hWHIHXfcQUJCAhdffDHbtm3jk08+iewfNWoUF110\nEZdffjm1atXioosuYv78+WzcuJH9+/cTHx9feODX5uWm7xbY9SnMm8uECRPIyMggISGBsWPH8vTT\nTxOGIT/96U9JTU3lrLPOYvr06QwdOvSoF72RpPLC6e8k6XAOBsbBudAEag2FnHo1CX/3GL/MXM2r\nr75KEASMHz8+0vu8f/9+6tevT+/evUlLSwOgoKCA8ePH89JLLxGGIaeffjovvPACdevWPX51FxsP\nXiv73+Tk5TFjxgxeffVVnnnmGapVq0ZsbCyLFi0iNjaWGTNm8Nxzz/HSSy9FHgJ8++23+c1vfkPT\npk0599xzGTFiROH1m8YWhucWxT5zHTDv3MJhM5JUAR3N9HcGaUk6nIoYGL8W/smCWr+FnGee4Y87\ndvLee+/x0EMPsXDhQi666CI++OADPv30UwYOHMiSJUs45ZRTyM7OplevXqxdu5bWrVuzY8cO3n33\n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\n1KpVi5kzZ/LHP/7xiMstq27LtsB7YRi+DxAEwbNAb6D8BOliK4J93OgsTh0/iQGDBnPyySfz5JNP\nAlCvXj1ycnKYO3duZMqm2NhYMjIyaNu2beSJUID333+f8847j1tuuYWtW7fy7rvv0qhRI0455RRq\n1qzJxo0bI/8jSk5O5tZbb2XXrl3Url2befPmRZbk7d69Ow899BBjxowBIDMzk8TERDZv3kx8fDzx\n8fGsXLmSjRs3GqQlHZ2KOM2fpBPLEX6hT0xMjDzYXNxNN930rb+cfdcX94EDBzJw4MCoyy2roR1n\nAx8W2/6oqK18+NrPCmuSt9F22E9JPPdc7r77bsaPH8+wYcOIi4ujR48eJCcnR04dPXo0jz76KK1a\ntWLnzp2R9j//+c/ExcWRmJjI2rVrueGGG+jZsyf5+fk0a9aMsWPH0r59ewDOPvts7rjjDtq2bUuH\nDh2IjY2NLCE8ZcoU0tPTSUhIoHnz5kybNg2AP/zhD8TFxZGQkEC1atW49NJLS/EPJumEUBGn+ZN0\nYimhqTtLS5ksER4EwdVAzzAMhxZt/w/QLgzDkV87bjgwHKBhw4ZttmzZUjoFloPlgHNycqhVqxb5\n+fn06dOHIUOG0KdPn1L5bEmVWLFf42jcsDBEl/cZSiSdOA52Zg7OLeyZzqLwC30pTjlaEZYI3wY0\nKLZ9TlHbIcIwfBx4HCApKan0En85WA54woQJLFiwgLy8PLp3786VV15Zap8tqRLrn2JwllR2Dv73\np/gX+tTy+4W+rHqkqwL/ArpRGKBXAv3DMPzOqS+SkpLCg/MzH3floEdakiRJpe9oeqTLZIx0GIb5\nwEjgdWAD8OfvC9GlznGCkiRJOowym2w4DMNXgFfK6vO/VwX7WUGSJEmlz1U7vovjBCVJkvQ9XCJc\nkiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqS\nJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIk\nSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJ\nioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmK\ngkFakiRJioJBWpIkSYqCQVqSJEmKgkFako5Afn5+WZcgSSpnDNKSBEyaNIkmTZrQsWNHrr/+elJT\nU+natSu33norSUlJ/PGPf2THjh307duX5ORkkpOTWbZsGQCff/45Q4YMoW3btrRq1YoXX3wRgBkz\nZnDVVVfRs2dPGjduzC9/+cuyvEVJUgmrWtYFSFJZW7lyJfPmzWP16tXs37+f1q1b06ZNGwC+/PJL\n0tPTAejfvz+33XYbHTt2ZOvWrfTo0YMNGzYwefJkLrroIp566il2795N27ZtufjiiwHIzMzknXfe\noXr16jRp0oSbb76ZBg0alNm9SpJKjkFaUqW3bNkyevfuTY0aNahRowaXX355ZF+/fv0i7xcsWMD6\n9esj25999hk5OTm88cYb/PWvfyU1NRWAvLw8tm7dCkC3bt2oW7cuAM2bN2fLli0GaUk6QRikJel7\nnHTSSZH3BQUFrFixgho1ahxyTBiGzJs3jyZNmhzS/vbbb1O9evXIdkxMjGOtJekE4hhpSZXX7FnQ\nNJYOv7iNl+67l7wZaeTk5DB//vxvPbx79+489NBDke3MzEwAevTowUMPPUQYhgC88847x792SVKZ\nM0hLqpxmz4LRw6HvFpJnwBXJX5Iw9KdcmtSG+Pj4yHCM4qZMmUJ6ejoJCQk0b96cadOmAXDnnXey\nf/9+EhISaNGiBXfeeWcp34wkqSwEB3tQyrukpKTw4AM/knTMmsZC3y3QonAzJw9qbYbc5xrQuc4Z\nPP7447Ru3bpMS5Qklb4gCDLCMEw6kmOPqUc6CIJrgiBYFwRBQRAESV/b96sgCN4LgiArCIIexdrb\nBEGwpmjflCAIgmOpQZKismkrFBvSPPxJSHwGWm/6kL59+xqiJUmHdawPG64FrgIeK94YBEFz4DoK\n+3rOAhYEQXBBGIYHgEeBYcDbwCtAT+DVY6xDko5O44aQ9VWP9OyRwDpg3rnwq1+VZWWSpArimHqk\nwzDcEIZh1rfs6g08G4bhF2EYfgC8B7QNguBMoE4YhivCwjElM4Erj6UGSYrKXZMhrWZheM6n8DWt\nZmG7JElH4HhNf3c2sKLY9kdFbfuL3n+9XZJKV/+UwteJ4wqHeTRuCKmTv2qXJOkwDhukgyBYAPzw\nW3aNC8PwxZIv6ZDPHg4MB2jYsOHx/ChJlVH/FIOzJClqhw3SYRheHMV1twHFl+46p6htW9H7r7d/\n12c/DjwOhbN2RFGHJEmSdFwcr3mk/wpcFwRB9SAIGgGNgX+GYbgd+CwIgvZFs3XcABzXXm1JkiTp\neDjW6e/6BEHwEfBj4OUgCF4HCMNwHfBnYD3wGvDzohk7AEYAT1L4AOJmnLFDkiRJFZALskiSJElF\nSm1BFkmSJKmyMkhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJ\nUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEtSJfHM\nM8/Qtm1bEhMT+dnPfsaBAweYPn06F1xwAW3btmXYsGGMHDkSgM2bN9O+fXvi4+MZP348tWrVAmD7\n9u107tyZxMRE4uLiWLJkSVnekiSVKYO0pCO2e/dupk6delTnDBo0iLlz5x6ninSkNmzYwJw5c1i2\nbBmZmZnExMQwa9YsJk2axIoVK1i2bBkbN26MHD9q1ChGjRrFmjVrOOeccyLts2fPpkePHmRmZrJ6\n9WoSExPL4nYkqVwwSEs6YtEEaZUPb731FhkZGSQnJ5OYmMhbb73F73//e7p06cKpp55KtWrVuOaa\nayLHL1++PLLdv3//SHtycjJpaWlMmDCBNWvWULt27VK/F0kqLwzSko7Y2LFj2bx5M4mJiYwZM4Yx\nY8YQFxdHfHw8c+bMASAMQ0aOHEmTJk24+OKL+c9//hM5f+LEiSQnJxMXF8fw4cMJw5DNmzfTunXr\nyDGbNm06ZFslIwxDBg4cSGZmJpmZmWRlZTFhwoSjvk7nzp1ZvHgxZ599NoMGDWLmzJklX6wkVRAG\naUlH7N577+X8888nMzOT9u3bR37eX7BgAWPGjGH79u08//zzZGVlsX79embOnMk//vGPyPkjR45k\n5cqVrF27ln379jF//nzOP/986tatS2ZmJgBpaWkMHjy4rG7xxDN7FjSNpduoW5j7QCr/ebTwF4X/\n+7//o1WrVvz9739n165d5OfnM2/evMhp7du3j2w/++yzkfYtW7ZQv359hg0bxtChQ1m1alXp3o8k\nlSMGaUlRWbp0Kddffz0xMTHUr1+fLl26sHLlShYvXhxpP+uss7jooosi5yxcuJB27doRHx/P3/72\nN9atWwfA0KFDSUtL48CBA8yZM+eQoQQ6BrNnwejh0HcLzWfAPZfl0/2WkSQ0bMgll1zC9u3bueOO\n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\nZ0mqAJz+TpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqS\nJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIk\nSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJ\nioJBWpIkSYqCQVqSKqns7Gzi4uLKugxJqrAM0pIkSVIUDNKSVIkdOHCAYcOG0aJFC7p3786+fft4\n4oknSE5OpmXLlvTt25fc3FwABg0axE033UT79u0577zzWLRoEUOGDKFZs2YMGjSobG9EksqAQVqS\nKrFNmzbx85//nHXr1nHyySczb948rrrqKlauXMnq1atp1qwZ06dPjxy/a9culi9fzoMPPsgVV1zB\nbbfdxrp161izZg2ZmZlleCeSVPoM0pJUiTVq1IjExEQA2rRpQ3Z2NmvXrqVTp07Ex8cza9Ys1q1b\nFzn+8ssvJwgC4uPjqV+/PvHx8VSpUoUWLVqQnZ1dRnchSWXDIC1JlVj16tUj72NiYsjPz2fQoEE8\n/PDDrFmzhl//+tfk5eV94/gqVaoccm6VKlXIz88vvcIlqRwwSEtSZTJ7FjSNhZgq0K0j7NnzjUP2\n7t3LmWeeyf79+5k1a1bp1yhJFYRBWpIqi9mzYPRw6LsF0kLouQ3+va2wvZhJkybR7v+3d7+hltR1\nHMffH1a0lIzMzUxdd4VtN4WIvKhgBZGkCbFGBYuCQpGE1bMeKAsmidDfJxIpBpmGpP2hXCQp16ge\n2bbG+mfLzVW32mXTMtAnsWl+e3B+N8d1r957zu6ZM3vfL/hx5n5n5u7vng8z89s5M3POPZfzzz+f\n9evX99RZSZp9qaq++7Aoc3NztW3btr67IUnDtX71aBB9Vqe2A/jJ6fDY7n76JEkzJsmDVTW3mGU9\nIy1Jy8Xjf4V1B9TWtbokackmGkgnuT7Jw0m2J/llknd05l2TZFeSnUku7NTPTvJIm3djkkzSB0nS\nIq1dBTsPqO1sdUnSkk16RvrrVfXuqnoPcA9wLUCSM4GNjD5AvAj4dpIVbZ2bgM8Aa1u7aMI+SJIW\n49ob4NZjR5dzvMjo9dZjR3VJ0pIdNcnKVfV858fjgPkLrjcAd1bVfuCpJLuAc5LsBo6vqgcAktwO\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc9c99cbe0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.manifold import TSNE\n",
    "\n",
    "words = w2v_model.wv.index2word\n",
    "wvs = w2v_model.wv[words]\n",
    "\n",
    "tsne = TSNE(n_components=2, random_state=0, n_iter=5000, perplexity=2)\n",
    "np.set_printoptions(suppress=True)\n",
    "T = tsne.fit_transform(wvs)\n",
    "labels = words\n",
    "\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n",
    "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n",
    "    plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sample word embedding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.04576328,  0.02328374, -0.04483001,  0.0086611 ,  0.05173225,\n",
       "        0.00953358, -0.04087641, -0.00427487, -0.0456274 ,  0.02155695], dtype=float32)"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w2v_model.wv['sky']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build framework for getting document level embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def average_word_vectors(words, model, vocabulary, num_features):\n",
    "    \n",
    "    feature_vector = np.zeros((num_features,),dtype=\"float64\")\n",
    "    nwords = 0.\n",
    "    \n",
    "    for word in words:\n",
    "        if word in vocabulary: \n",
    "            nwords = nwords + 1.\n",
    "            feature_vector = np.add(feature_vector, model[word])\n",
    "    \n",
    "    if nwords:\n",
    "        feature_vector = np.divide(feature_vector, nwords)\n",
    "        \n",
    "    return feature_vector\n",
    "    \n",
    "   \n",
    "def averaged_word_vectorizer(corpus, model, num_features):\n",
    "    vocabulary = set(model.wv.index2word)\n",
    "    features = [average_word_vectors(tokenized_sentence, model, vocabulary, num_features)\n",
    "                    for tokenized_sentence in corpus]\n",
    "    return np.array(features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.004690</td>\n",
       "      <td>0.009370</td>\n",
       "      <td>-0.009667</td>\n",
       "      <td>0.026014</td>\n",
       "      <td>0.034989</td>\n",
       "      <td>0.010402</td>\n",
       "      <td>-0.033441</td>\n",
       "      <td>-0.011956</td>\n",
       "      <td>-0.000243</td>\n",
       "      <td>0.010552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.005751</td>\n",
       "      <td>0.003210</td>\n",
       "      <td>-0.001964</td>\n",
       "      <td>0.016550</td>\n",
       "      <td>0.030962</td>\n",
       "      <td>0.004340</td>\n",
       "      <td>-0.019463</td>\n",
       "      <td>-0.009149</td>\n",
       "      <td>0.008256</td>\n",
       "      <td>0.019600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.016712</td>\n",
       "      <td>0.004806</td>\n",
       "      <td>-0.001924</td>\n",
       "      <td>-0.027226</td>\n",
       "      <td>0.029162</td>\n",
       "      <td>-0.017201</td>\n",
       "      <td>-0.023197</td>\n",
       "      <td>-0.008610</td>\n",
       "      <td>-0.011976</td>\n",
       "      <td>0.020602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.009216</td>\n",
       "      <td>0.003900</td>\n",
       "      <td>-0.009232</td>\n",
       "      <td>-0.005232</td>\n",
       "      <td>0.042718</td>\n",
       "      <td>-0.032432</td>\n",
       "      <td>-0.006243</td>\n",
       "      <td>0.013524</td>\n",
       "      <td>0.008095</td>\n",
       "      <td>0.021227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.016321</td>\n",
       "      <td>-0.008715</td>\n",
       "      <td>-0.001633</td>\n",
       "      <td>-0.000501</td>\n",
       "      <td>0.027367</td>\n",
       "      <td>-0.037861</td>\n",
       "      <td>0.008515</td>\n",
       "      <td>0.021066</td>\n",
       "      <td>0.020373</td>\n",
       "      <td>0.016512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.018538</td>\n",
       "      <td>0.007522</td>\n",
       "      <td>-0.009302</td>\n",
       "      <td>-0.025440</td>\n",
       "      <td>0.037199</td>\n",
       "      <td>-0.009890</td>\n",
       "      <td>-0.021419</td>\n",
       "      <td>-0.011769</td>\n",
       "      <td>-0.002221</td>\n",
       "      <td>0.018277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.008532</td>\n",
       "      <td>0.008041</td>\n",
       "      <td>-0.016573</td>\n",
       "      <td>0.018653</td>\n",
       "      <td>0.036140</td>\n",
       "      <td>0.004038</td>\n",
       "      <td>-0.022891</td>\n",
       "      <td>0.000484</td>\n",
       "      <td>-0.005900</td>\n",
       "      <td>0.015766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.024419</td>\n",
       "      <td>0.012915</td>\n",
       "      <td>-0.010596</td>\n",
       "      <td>-0.039350</td>\n",
       "      <td>0.037018</td>\n",
       "      <td>-0.013378</td>\n",
       "      <td>-0.020677</td>\n",
       "      <td>-0.004417</td>\n",
       "      <td>-0.011864</td>\n",
       "      <td>0.013540</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6  \\\n",
       "0  0.004690  0.009370 -0.009667  0.026014  0.034989  0.010402 -0.033441   \n",
       "1  0.005751  0.003210 -0.001964  0.016550  0.030962  0.004340 -0.019463   \n",
       "2  0.016712  0.004806 -0.001924 -0.027226  0.029162 -0.017201 -0.023197   \n",
       "3 -0.009216  0.003900 -0.009232 -0.005232  0.042718 -0.032432 -0.006243   \n",
       "4 -0.016321 -0.008715 -0.001633 -0.000501  0.027367 -0.037861  0.008515   \n",
       "5  0.018538  0.007522 -0.009302 -0.025440  0.037199 -0.009890 -0.021419   \n",
       "6  0.008532  0.008041 -0.016573  0.018653  0.036140  0.004038 -0.022891   \n",
       "7  0.024419  0.012915 -0.010596 -0.039350  0.037018 -0.013378 -0.020677   \n",
       "\n",
       "          7         8         9  \n",
       "0 -0.011956 -0.000243  0.010552  \n",
       "1 -0.009149  0.008256  0.019600  \n",
       "2 -0.008610 -0.011976  0.020602  \n",
       "3  0.013524  0.008095  0.021227  \n",
       "4  0.021066  0.020373  0.016512  \n",
       "5 -0.011769 -0.002221  0.018277  \n",
       "6  0.000484 -0.005900  0.015766  \n",
       "7 -0.004417 -0.011864  0.013540  "
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w2v_feature_array = averaged_word_vectorizer(corpus=tokenized_corpus, model=w2v_model,\n",
    "                                             num_features=feature_size)\n",
    "pd.DataFrame(w2v_feature_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Clustering with word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Document</th>\n",
       "      <th>Category</th>\n",
       "      <th>ClusterLabel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>The sky is blue and beautiful.</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Love this blue and beautiful sky!</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The quick brown fox jumps over the lazy dog.</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A king's breakfast has sausages, ham, bacon, eggs, toast and beans</td>\n",
       "      <td>food</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>I love green eggs, ham, sausages and bacon!</td>\n",
       "      <td>food</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>The brown fox is quick and the blue dog is lazy!</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>The sky is very blue and the sky is very beautiful today</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>The dog is lazy but the brown fox is quick!</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                             Document  \\\n",
       "0                                      The sky is blue and beautiful.   \n",
       "1                                   Love this blue and beautiful sky!   \n",
       "2                        The quick brown fox jumps over the lazy dog.   \n",
       "3  A king's breakfast has sausages, ham, bacon, eggs, toast and beans   \n",
       "4                         I love green eggs, ham, sausages and bacon!   \n",
       "5                    The brown fox is quick and the blue dog is lazy!   \n",
       "6            The sky is very blue and the sky is very beautiful today   \n",
       "7                         The dog is lazy but the brown fox is quick!   \n",
       "\n",
       "  Category  ClusterLabel  \n",
       "0  weather             2  \n",
       "1  weather             2  \n",
       "2  animals             1  \n",
       "3     food             0  \n",
       "4     food             0  \n",
       "5  animals             1  \n",
       "6  weather             2  \n",
       "7  animals             1  "
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.cluster import AffinityPropagation\n",
    "\n",
    "ap = AffinityPropagation()\n",
    "ap.fit(w2v_feature_array)\n",
    "cluster_labels = ap.labels_\n",
    "cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])\n",
    "pd.concat([corpus_df, cluster_labels], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fc99740c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "\n",
    "pca = PCA(n_components=2, random_state=0)\n",
    "pcs = pca.fit_transform(w2v_feature_array)\n",
    "labels = ap.labels_\n",
    "categories = list(corpus_df['Category'])\n",
    "plt.figure(figsize=(8, 6))\n",
    "\n",
    "for i in range(len(labels)):\n",
    "    label = labels[i]\n",
    "    color = 'orange' if label == 0 else 'blue' if label == 1 else 'green'\n",
    "    annotation_label = categories[i]\n",
    "    x, y = pcs[i]\n",
    "    plt.scatter(x, y, c=color, edgecolors='k')\n",
    "    plt.annotate(annotation_label, xy=(x+1e-4, y+1e-3), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## GloVe Embeddings with spaCy"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "# Use the following command to install spaCy\n",
    "> pip install -U spacy\n",
    "\n",
    "OR\n",
    "\n",
    "> conda install -c conda-forge spacy\n",
    "\n",
    "\n",
    "# Download the following language model and store it in disk\n",
    "https://github.com/explosion/spacy-models/releases/tag/en_vectors_web_lg-2.0.0\n",
    "\n",
    "\n",
    "# Link the same to spacy \n",
    "> python -m spacy link ./spacymodels/en_vectors_web_lg-2.0.0/en_vectors_web_lg en_vecs\n",
    "\n",
    "    Linking successful\n",
    "    ./spacymodels/en_vectors_web_lg-2.0.0/en_vectors_web_lg --> ./Anaconda3/lib/site-packages/spacy/data/en_vecs\n",
    "\n",
    "    You can now load the model via spacy.load('en_vecs')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total word vectors: 1070971\n"
     ]
    }
   ],
   "source": [
    "import spacy\n",
    "\n",
    "nlp = spacy.load('en_vecs')\n",
    "\n",
    "total_vectors = len(nlp.vocab.vectors)\n",
    "print('Total word vectors:', total_vectors)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualize GloVe word embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>290</th>\n",
       "      <th>291</th>\n",
       "      <th>292</th>\n",
       "      <th>293</th>\n",
       "      <th>294</th>\n",
       "      <th>295</th>\n",
       "      <th>296</th>\n",
       "      <th>297</th>\n",
       "      <th>298</th>\n",
       "      <th>299</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>fox</th>\n",
       "      <td>-0.348680</td>\n",
       "      <td>-0.077720</td>\n",
       "      <td>0.177750</td>\n",
       "      <td>-0.094953</td>\n",
       "      <td>-0.452890</td>\n",
       "      <td>0.237790</td>\n",
       "      <td>0.209440</td>\n",
       "      <td>0.037886</td>\n",
       "      <td>0.035064</td>\n",
       "      <td>0.899010</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.283050</td>\n",
       "      <td>0.270240</td>\n",
       "      <td>-0.654800</td>\n",
       "      <td>0.105300</td>\n",
       "      <td>-0.068738</td>\n",
       "      <td>-0.534750</td>\n",
       "      <td>0.061783</td>\n",
       "      <td>0.123610</td>\n",
       "      <td>-0.553700</td>\n",
       "      <td>-0.544790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ham</th>\n",
       "      <td>-0.773320</td>\n",
       "      <td>-0.282540</td>\n",
       "      <td>0.580760</td>\n",
       "      <td>0.841480</td>\n",
       "      <td>0.258540</td>\n",
       "      <td>0.585210</td>\n",
       "      <td>-0.021890</td>\n",
       "      <td>-0.463680</td>\n",
       "      <td>0.139070</td>\n",
       "      <td>0.658720</td>\n",
       "      <td>...</td>\n",
       "      <td>0.464470</td>\n",
       "      <td>0.481400</td>\n",
       "      <td>-0.829200</td>\n",
       "      <td>0.354910</td>\n",
       "      <td>0.224530</td>\n",
       "      <td>-0.493920</td>\n",
       "      <td>0.456930</td>\n",
       "      <td>-0.649100</td>\n",
       "      <td>-0.131930</td>\n",
       "      <td>0.372040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>brown</th>\n",
       "      <td>-0.374120</td>\n",
       "      <td>-0.076264</td>\n",
       "      <td>0.109260</td>\n",
       "      <td>0.186620</td>\n",
       "      <td>0.029943</td>\n",
       "      <td>0.182700</td>\n",
       "      <td>-0.631980</td>\n",
       "      <td>0.133060</td>\n",
       "      <td>-0.128980</td>\n",
       "      <td>0.603430</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.015404</td>\n",
       "      <td>0.392890</td>\n",
       "      <td>-0.034826</td>\n",
       "      <td>-0.720300</td>\n",
       "      <td>-0.365320</td>\n",
       "      <td>0.740510</td>\n",
       "      <td>0.108390</td>\n",
       "      <td>-0.365760</td>\n",
       "      <td>-0.288190</td>\n",
       "      <td>0.114630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beautiful</th>\n",
       "      <td>0.171200</td>\n",
       "      <td>0.534390</td>\n",
       "      <td>-0.348540</td>\n",
       "      <td>-0.097234</td>\n",
       "      <td>0.101800</td>\n",
       "      <td>-0.170860</td>\n",
       "      <td>0.295650</td>\n",
       "      <td>-0.041816</td>\n",
       "      <td>-0.516550</td>\n",
       "      <td>2.117200</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.285540</td>\n",
       "      <td>0.104670</td>\n",
       "      <td>0.126310</td>\n",
       "      <td>0.120040</td>\n",
       "      <td>0.254380</td>\n",
       "      <td>0.247400</td>\n",
       "      <td>0.207670</td>\n",
       "      <td>0.172580</td>\n",
       "      <td>0.063875</td>\n",
       "      <td>0.350990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>jumps</th>\n",
       "      <td>-0.334840</td>\n",
       "      <td>0.215990</td>\n",
       "      <td>-0.350440</td>\n",
       "      <td>-0.260020</td>\n",
       "      <td>0.411070</td>\n",
       "      <td>0.154010</td>\n",
       "      <td>-0.386110</td>\n",
       "      <td>0.206380</td>\n",
       "      <td>0.386700</td>\n",
       "      <td>1.460500</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.107030</td>\n",
       "      <td>-0.279480</td>\n",
       "      <td>-0.186200</td>\n",
       "      <td>-0.543140</td>\n",
       "      <td>-0.479980</td>\n",
       "      <td>-0.284680</td>\n",
       "      <td>0.036022</td>\n",
       "      <td>0.190290</td>\n",
       "      <td>0.692290</td>\n",
       "      <td>-0.071501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>eggs</th>\n",
       "      <td>-0.417810</td>\n",
       "      <td>-0.035192</td>\n",
       "      <td>-0.126150</td>\n",
       "      <td>-0.215930</td>\n",
       "      <td>-0.669740</td>\n",
       "      <td>0.513250</td>\n",
       "      <td>-0.797090</td>\n",
       "      <td>-0.068611</td>\n",
       "      <td>0.634660</td>\n",
       "      <td>1.256300</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.232860</td>\n",
       "      <td>-0.139740</td>\n",
       "      <td>-0.681080</td>\n",
       "      <td>-0.370920</td>\n",
       "      <td>-0.545510</td>\n",
       "      <td>0.073728</td>\n",
       "      <td>0.111620</td>\n",
       "      <td>-0.324700</td>\n",
       "      <td>0.059721</td>\n",
       "      <td>0.159160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beans</th>\n",
       "      <td>-0.423290</td>\n",
       "      <td>-0.264500</td>\n",
       "      <td>0.200870</td>\n",
       "      <td>0.082187</td>\n",
       "      <td>0.066944</td>\n",
       "      <td>1.027600</td>\n",
       "      <td>-0.989140</td>\n",
       "      <td>-0.259950</td>\n",
       "      <td>0.145960</td>\n",
       "      <td>0.766450</td>\n",
       "      <td>...</td>\n",
       "      <td>0.048760</td>\n",
       "      <td>0.351680</td>\n",
       "      <td>-0.786260</td>\n",
       "      <td>-0.368790</td>\n",
       "      <td>-0.528640</td>\n",
       "      <td>0.287650</td>\n",
       "      <td>-0.273120</td>\n",
       "      <td>-1.114000</td>\n",
       "      <td>0.064322</td>\n",
       "      <td>0.223620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sky</th>\n",
       "      <td>0.312550</td>\n",
       "      <td>-0.303080</td>\n",
       "      <td>0.019587</td>\n",
       "      <td>-0.354940</td>\n",
       "      <td>0.100180</td>\n",
       "      <td>-0.141530</td>\n",
       "      <td>-0.514270</td>\n",
       "      <td>0.886110</td>\n",
       "      <td>-0.530540</td>\n",
       "      <td>1.556600</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.667050</td>\n",
       "      <td>0.279110</td>\n",
       "      <td>0.500970</td>\n",
       "      <td>-0.277580</td>\n",
       "      <td>-0.143720</td>\n",
       "      <td>0.342710</td>\n",
       "      <td>0.287580</td>\n",
       "      <td>0.537740</td>\n",
       "      <td>0.363490</td>\n",
       "      <td>0.496920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>bacon</th>\n",
       "      <td>-0.430730</td>\n",
       "      <td>-0.016025</td>\n",
       "      <td>0.484620</td>\n",
       "      <td>0.101390</td>\n",
       "      <td>-0.299200</td>\n",
       "      <td>0.761820</td>\n",
       "      <td>-0.353130</td>\n",
       "      <td>-0.325290</td>\n",
       "      <td>0.156730</td>\n",
       "      <td>0.873210</td>\n",
       "      <td>...</td>\n",
       "      <td>0.304240</td>\n",
       "      <td>0.413440</td>\n",
       "      <td>-0.540730</td>\n",
       "      <td>-0.035930</td>\n",
       "      <td>-0.429450</td>\n",
       "      <td>-0.246590</td>\n",
       "      <td>0.161490</td>\n",
       "      <td>-1.065400</td>\n",
       "      <td>-0.244940</td>\n",
       "      <td>0.269540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>breakfast</th>\n",
       "      <td>0.073378</td>\n",
       "      <td>0.227670</td>\n",
       "      <td>0.208420</td>\n",
       "      <td>-0.456790</td>\n",
       "      <td>-0.078219</td>\n",
       "      <td>0.601960</td>\n",
       "      <td>-0.024494</td>\n",
       "      <td>-0.467980</td>\n",
       "      <td>0.054627</td>\n",
       "      <td>2.283700</td>\n",
       "      <td>...</td>\n",
       "      <td>0.647710</td>\n",
       "      <td>0.373820</td>\n",
       "      <td>0.019931</td>\n",
       "      <td>-0.033672</td>\n",
       "      <td>-0.073184</td>\n",
       "      <td>0.296830</td>\n",
       "      <td>0.340420</td>\n",
       "      <td>-0.599390</td>\n",
       "      <td>-0.061114</td>\n",
       "      <td>0.232200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>toast</th>\n",
       "      <td>0.130740</td>\n",
       "      <td>-0.193730</td>\n",
       "      <td>0.253270</td>\n",
       "      <td>0.090102</td>\n",
       "      <td>-0.272580</td>\n",
       "      <td>-0.030571</td>\n",
       "      <td>0.096945</td>\n",
       "      <td>-0.115060</td>\n",
       "      <td>0.484000</td>\n",
       "      <td>0.848380</td>\n",
       "      <td>...</td>\n",
       "      <td>0.142080</td>\n",
       "      <td>0.481910</td>\n",
       "      <td>0.045167</td>\n",
       "      <td>0.057151</td>\n",
       "      <td>-0.149520</td>\n",
       "      <td>-0.495130</td>\n",
       "      <td>-0.086677</td>\n",
       "      <td>-0.569040</td>\n",
       "      <td>-0.359290</td>\n",
       "      <td>0.097443</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>today</th>\n",
       "      <td>-0.156570</td>\n",
       "      <td>0.594890</td>\n",
       "      <td>-0.031445</td>\n",
       "      <td>-0.077586</td>\n",
       "      <td>0.278630</td>\n",
       "      <td>-0.509210</td>\n",
       "      <td>-0.066350</td>\n",
       "      <td>-0.081890</td>\n",
       "      <td>-0.047986</td>\n",
       "      <td>2.803600</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.326580</td>\n",
       "      <td>-0.413380</td>\n",
       "      <td>0.367910</td>\n",
       "      <td>-0.262630</td>\n",
       "      <td>-0.203690</td>\n",
       "      <td>-0.296560</td>\n",
       "      <td>-0.014873</td>\n",
       "      <td>-0.250060</td>\n",
       "      <td>-0.115940</td>\n",
       "      <td>0.083741</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>blue</th>\n",
       "      <td>0.129450</td>\n",
       "      <td>0.036518</td>\n",
       "      <td>0.032298</td>\n",
       "      <td>-0.060034</td>\n",
       "      <td>0.399840</td>\n",
       "      <td>-0.103020</td>\n",
       "      <td>-0.507880</td>\n",
       "      <td>0.076630</td>\n",
       "      <td>-0.422920</td>\n",
       "      <td>0.815730</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.501280</td>\n",
       "      <td>0.169010</td>\n",
       "      <td>0.548250</td>\n",
       "      <td>-0.319380</td>\n",
       "      <td>-0.072887</td>\n",
       "      <td>0.382950</td>\n",
       "      <td>0.237410</td>\n",
       "      <td>0.052289</td>\n",
       "      <td>0.182060</td>\n",
       "      <td>0.412640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>green</th>\n",
       "      <td>-0.072368</td>\n",
       "      <td>0.233200</td>\n",
       "      <td>0.137260</td>\n",
       "      <td>-0.156630</td>\n",
       "      <td>0.248440</td>\n",
       "      <td>0.349870</td>\n",
       "      <td>-0.241700</td>\n",
       "      <td>-0.091426</td>\n",
       "      <td>-0.530150</td>\n",
       "      <td>1.341300</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.405170</td>\n",
       "      <td>0.243570</td>\n",
       "      <td>0.437300</td>\n",
       "      <td>-0.461520</td>\n",
       "      <td>-0.352710</td>\n",
       "      <td>0.336250</td>\n",
       "      <td>0.069899</td>\n",
       "      <td>-0.111550</td>\n",
       "      <td>0.532930</td>\n",
       "      <td>0.712680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>kings</th>\n",
       "      <td>0.259230</td>\n",
       "      <td>-0.854690</td>\n",
       "      <td>0.360010</td>\n",
       "      <td>-0.642000</td>\n",
       "      <td>0.568530</td>\n",
       "      <td>-0.321420</td>\n",
       "      <td>0.173250</td>\n",
       "      <td>0.133030</td>\n",
       "      <td>-0.089720</td>\n",
       "      <td>1.528600</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.470090</td>\n",
       "      <td>0.063743</td>\n",
       "      <td>-0.545210</td>\n",
       "      <td>-0.192310</td>\n",
       "      <td>-0.301020</td>\n",
       "      <td>1.068500</td>\n",
       "      <td>0.231160</td>\n",
       "      <td>-0.147330</td>\n",
       "      <td>0.662490</td>\n",
       "      <td>-0.577420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>dog</th>\n",
       "      <td>-0.057120</td>\n",
       "      <td>0.052685</td>\n",
       "      <td>0.003026</td>\n",
       "      <td>-0.048517</td>\n",
       "      <td>0.007043</td>\n",
       "      <td>0.041856</td>\n",
       "      <td>-0.024704</td>\n",
       "      <td>-0.039783</td>\n",
       "      <td>0.009614</td>\n",
       "      <td>0.308416</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003257</td>\n",
       "      <td>-0.036864</td>\n",
       "      <td>-0.043878</td>\n",
       "      <td>0.000249</td>\n",
       "      <td>-0.026959</td>\n",
       "      <td>0.077895</td>\n",
       "      <td>0.044350</td>\n",
       "      <td>0.035107</td>\n",
       "      <td>0.042551</td>\n",
       "      <td>-0.010643</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sausages</th>\n",
       "      <td>-0.174290</td>\n",
       "      <td>-0.064869</td>\n",
       "      <td>-0.046976</td>\n",
       "      <td>0.287420</td>\n",
       "      <td>-0.128150</td>\n",
       "      <td>0.647630</td>\n",
       "      <td>0.056315</td>\n",
       "      <td>-0.240440</td>\n",
       "      <td>-0.025094</td>\n",
       "      <td>0.502220</td>\n",
       "      <td>...</td>\n",
       "      <td>0.302240</td>\n",
       "      <td>0.195470</td>\n",
       "      <td>-0.653980</td>\n",
       "      <td>-0.291150</td>\n",
       "      <td>-0.684290</td>\n",
       "      <td>-0.266370</td>\n",
       "      <td>0.304310</td>\n",
       "      <td>-0.806830</td>\n",
       "      <td>0.619540</td>\n",
       "      <td>0.201200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lazy</th>\n",
       "      <td>-0.353320</td>\n",
       "      <td>-0.299710</td>\n",
       "      <td>-0.176230</td>\n",
       "      <td>-0.321940</td>\n",
       "      <td>-0.385640</td>\n",
       "      <td>0.586110</td>\n",
       "      <td>0.411160</td>\n",
       "      <td>-0.418680</td>\n",
       "      <td>0.073093</td>\n",
       "      <td>1.486500</td>\n",
       "      <td>...</td>\n",
       "      <td>0.402310</td>\n",
       "      <td>-0.038554</td>\n",
       "      <td>-0.288670</td>\n",
       "      <td>-0.244130</td>\n",
       "      <td>0.460990</td>\n",
       "      <td>0.514170</td>\n",
       "      <td>0.136260</td>\n",
       "      <td>0.344190</td>\n",
       "      <td>-0.845300</td>\n",
       "      <td>-0.077383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>love</th>\n",
       "      <td>0.139490</td>\n",
       "      <td>0.534530</td>\n",
       "      <td>-0.252470</td>\n",
       "      <td>-0.125650</td>\n",
       "      <td>0.048748</td>\n",
       "      <td>0.152440</td>\n",
       "      <td>0.199060</td>\n",
       "      <td>-0.065970</td>\n",
       "      <td>0.128830</td>\n",
       "      <td>2.055900</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.124380</td>\n",
       "      <td>0.178440</td>\n",
       "      <td>-0.099469</td>\n",
       "      <td>0.008682</td>\n",
       "      <td>0.089213</td>\n",
       "      <td>-0.075513</td>\n",
       "      <td>-0.049069</td>\n",
       "      <td>-0.015228</td>\n",
       "      <td>0.088408</td>\n",
       "      <td>0.302170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>quick</th>\n",
       "      <td>-0.445630</td>\n",
       "      <td>0.191510</td>\n",
       "      <td>-0.249210</td>\n",
       "      <td>0.465900</td>\n",
       "      <td>0.161950</td>\n",
       "      <td>0.212780</td>\n",
       "      <td>-0.046480</td>\n",
       "      <td>0.021170</td>\n",
       "      <td>0.417660</td>\n",
       "      <td>1.686900</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.329460</td>\n",
       "      <td>0.421860</td>\n",
       "      <td>-0.039543</td>\n",
       "      <td>0.150180</td>\n",
       "      <td>0.338220</td>\n",
       "      <td>0.049554</td>\n",
       "      <td>0.149420</td>\n",
       "      <td>-0.038789</td>\n",
       "      <td>-0.019069</td>\n",
       "      <td>0.348650</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>20 rows × 300 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                0         1         2         3         4         5    \\\n",
       "fox       -0.348680 -0.077720  0.177750 -0.094953 -0.452890  0.237790   \n",
       "ham       -0.773320 -0.282540  0.580760  0.841480  0.258540  0.585210   \n",
       "brown     -0.374120 -0.076264  0.109260  0.186620  0.029943  0.182700   \n",
       "beautiful  0.171200  0.534390 -0.348540 -0.097234  0.101800 -0.170860   \n",
       "jumps     -0.334840  0.215990 -0.350440 -0.260020  0.411070  0.154010   \n",
       "eggs      -0.417810 -0.035192 -0.126150 -0.215930 -0.669740  0.513250   \n",
       "beans     -0.423290 -0.264500  0.200870  0.082187  0.066944  1.027600   \n",
       "sky        0.312550 -0.303080  0.019587 -0.354940  0.100180 -0.141530   \n",
       "bacon     -0.430730 -0.016025  0.484620  0.101390 -0.299200  0.761820   \n",
       "breakfast  0.073378  0.227670  0.208420 -0.456790 -0.078219  0.601960   \n",
       "toast      0.130740 -0.193730  0.253270  0.090102 -0.272580 -0.030571   \n",
       "today     -0.156570  0.594890 -0.031445 -0.077586  0.278630 -0.509210   \n",
       "blue       0.129450  0.036518  0.032298 -0.060034  0.399840 -0.103020   \n",
       "green     -0.072368  0.233200  0.137260 -0.156630  0.248440  0.349870   \n",
       "kings      0.259230 -0.854690  0.360010 -0.642000  0.568530 -0.321420   \n",
       "dog       -0.057120  0.052685  0.003026 -0.048517  0.007043  0.041856   \n",
       "sausages  -0.174290 -0.064869 -0.046976  0.287420 -0.128150  0.647630   \n",
       "lazy      -0.353320 -0.299710 -0.176230 -0.321940 -0.385640  0.586110   \n",
       "love       0.139490  0.534530 -0.252470 -0.125650  0.048748  0.152440   \n",
       "quick     -0.445630  0.191510 -0.249210  0.465900  0.161950  0.212780   \n",
       "\n",
       "                6         7         8         9      ...          290  \\\n",
       "fox        0.209440  0.037886  0.035064  0.899010    ...    -0.283050   \n",
       "ham       -0.021890 -0.463680  0.139070  0.658720    ...     0.464470   \n",
       "brown     -0.631980  0.133060 -0.128980  0.603430    ...    -0.015404   \n",
       "beautiful  0.295650 -0.041816 -0.516550  2.117200    ...    -0.285540   \n",
       "jumps     -0.386110  0.206380  0.386700  1.460500    ...    -0.107030   \n",
       "eggs      -0.797090 -0.068611  0.634660  1.256300    ...    -0.232860   \n",
       "beans     -0.989140 -0.259950  0.145960  0.766450    ...     0.048760   \n",
       "sky       -0.514270  0.886110 -0.530540  1.556600    ...    -0.667050   \n",
       "bacon     -0.353130 -0.325290  0.156730  0.873210    ...     0.304240   \n",
       "breakfast -0.024494 -0.467980  0.054627  2.283700    ...     0.647710   \n",
       "toast      0.096945 -0.115060  0.484000  0.848380    ...     0.142080   \n",
       "today     -0.066350 -0.081890 -0.047986  2.803600    ...    -0.326580   \n",
       "blue      -0.507880  0.076630 -0.422920  0.815730    ...    -0.501280   \n",
       "green     -0.241700 -0.091426 -0.530150  1.341300    ...    -0.405170   \n",
       "kings      0.173250  0.133030 -0.089720  1.528600    ...    -0.470090   \n",
       "dog       -0.024704 -0.039783  0.009614  0.308416    ...     0.003257   \n",
       "sausages   0.056315 -0.240440 -0.025094  0.502220    ...     0.302240   \n",
       "lazy       0.411160 -0.418680  0.073093  1.486500    ...     0.402310   \n",
       "love       0.199060 -0.065970  0.128830  2.055900    ...    -0.124380   \n",
       "quick     -0.046480  0.021170  0.417660  1.686900    ...    -0.329460   \n",
       "\n",
       "                291       292       293       294       295       296  \\\n",
       "fox        0.270240 -0.654800  0.105300 -0.068738 -0.534750  0.061783   \n",
       "ham        0.481400 -0.829200  0.354910  0.224530 -0.493920  0.456930   \n",
       "brown      0.392890 -0.034826 -0.720300 -0.365320  0.740510  0.108390   \n",
       "beautiful  0.104670  0.126310  0.120040  0.254380  0.247400  0.207670   \n",
       "jumps     -0.279480 -0.186200 -0.543140 -0.479980 -0.284680  0.036022   \n",
       "eggs      -0.139740 -0.681080 -0.370920 -0.545510  0.073728  0.111620   \n",
       "beans      0.351680 -0.786260 -0.368790 -0.528640  0.287650 -0.273120   \n",
       "sky        0.279110  0.500970 -0.277580 -0.143720  0.342710  0.287580   \n",
       "bacon      0.413440 -0.540730 -0.035930 -0.429450 -0.246590  0.161490   \n",
       "breakfast  0.373820  0.019931 -0.033672 -0.073184  0.296830  0.340420   \n",
       "toast      0.481910  0.045167  0.057151 -0.149520 -0.495130 -0.086677   \n",
       "today     -0.413380  0.367910 -0.262630 -0.203690 -0.296560 -0.014873   \n",
       "blue       0.169010  0.548250 -0.319380 -0.072887  0.382950  0.237410   \n",
       "green      0.243570  0.437300 -0.461520 -0.352710  0.336250  0.069899   \n",
       "kings      0.063743 -0.545210 -0.192310 -0.301020  1.068500  0.231160   \n",
       "dog       -0.036864 -0.043878  0.000249 -0.026959  0.077895  0.044350   \n",
       "sausages   0.195470 -0.653980 -0.291150 -0.684290 -0.266370  0.304310   \n",
       "lazy      -0.038554 -0.288670 -0.244130  0.460990  0.514170  0.136260   \n",
       "love       0.178440 -0.099469  0.008682  0.089213 -0.075513 -0.049069   \n",
       "quick      0.421860 -0.039543  0.150180  0.338220  0.049554  0.149420   \n",
       "\n",
       "                297       298       299  \n",
       "fox        0.123610 -0.553700 -0.544790  \n",
       "ham       -0.649100 -0.131930  0.372040  \n",
       "brown     -0.365760 -0.288190  0.114630  \n",
       "beautiful  0.172580  0.063875  0.350990  \n",
       "jumps      0.190290  0.692290 -0.071501  \n",
       "eggs      -0.324700  0.059721  0.159160  \n",
       "beans     -1.114000  0.064322  0.223620  \n",
       "sky        0.537740  0.363490  0.496920  \n",
       "bacon     -1.065400 -0.244940  0.269540  \n",
       "breakfast -0.599390 -0.061114  0.232200  \n",
       "toast     -0.569040 -0.359290  0.097443  \n",
       "today     -0.250060 -0.115940  0.083741  \n",
       "blue       0.052289  0.182060  0.412640  \n",
       "green     -0.111550  0.532930  0.712680  \n",
       "kings     -0.147330  0.662490 -0.577420  \n",
       "dog        0.035107  0.042551 -0.010643  \n",
       "sausages  -0.806830  0.619540  0.201200  \n",
       "lazy       0.344190 -0.845300 -0.077383  \n",
       "love      -0.015228  0.088408  0.302170  \n",
       "quick     -0.038789 -0.019069  0.348650  \n",
       "\n",
       "[20 rows x 300 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "unique_words = list(set([word for sublist in [doc.split() for doc in norm_corpus] for word in sublist]))\n",
    "\n",
    "word_glove_vectors = np.array([nlp(word).vector for word in unique_words])\n",
    "pd.DataFrame(word_glove_vectors, index=unique_words)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtIAAAFpCAYAAACxj8+BAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtcVVX+//HXAhvNvJZmVhrp1xC5qge0vJYlOVZKdFFx\nCh118tr0++pk6ZSj2W3om1mW6RhmwUiDo5V2NTUvaQPoIa9kGloOY1pqEGJc1u+Pg2dQsfBw4IC+\nn48Hj3322pfz2Twect6us/baxlqLiIiIiIicGz9fFyAiIiIiUhspSIuIiIiIeEBBWkRERETEAwrS\nIiIiIiIeUJAWEREREfGAgrSIiIiIiAcUpEVEREREPKAgLSIiIiLiAQVpEREREREPKEiLiIiIiHig\njq8LqKhmzZrZgIAAX5chIiIiIuexjIyMw9ba5hXZt9YE6YCAANLT031dhoiIiIicx4wx+yq6r4Z2\niIiIiIh4QEFaRERERMQDCtIiIiIiIh5QkBYRERER8YCCtIiISDXJzs4mJCTklLb09HQmTJjgo4pE\npDJqzawdIiIi5yOHw4HD4fB1GSLiAfVIi4iI+MDevXvp2LEjf/3rX7ntttsAmDZtGsOHD6d37960\nadOG2bNnu/efMWMGgYGBdO/encGDB5OQkADA7Nmz6dChA2FhYQwaNMgn1yJyoap0j7QxphWwCGgB\nWGCetfYFY8ylQAoQAGQD91hrj5Qe8wjwe6AYmGCt/bCydYiIiNQWWVlZDBo0iIULF3LkyBE+/fRT\n97Zdu3axevVqcnNzCQwMZPTo0TidTpYsWUJmZiaFhYV06tSJzp07A/D000/z9ddfU7duXY4ePeqr\nSxK5IHmjR7oI+F9rbQegKzDWGNMBmAx8Yq1tB3xSuk7ptkFAMHAr8LIxxt8LdYiIiNR4hw4dYsCA\nASQlJREeHn7G9v79+1O3bl2aNWvG5ZdfzsGDB9mwYQMDBgygXr16NGzYkNtvv929f1hYGHFxcbz5\n5pvUqaMRmyLVqdJB2lqbY63dXPo6F9gJXAUMAF4v3e11YGDp6wHAYmvtCWvt18BXQFRl6xAREalx\nkpOgfQD4+7mWby+jcePGtG7dmvXr15d7SN26dd2v/f39KSoq+sW3WLFiBWPHjmXz5s1ERkb+6v4i\n4j1eHSNtjAkAOgKfAy2stTmlm/6Da+gHuEL2N2UO+7a0TURE5PyRnAQTR0HsPki0ruXMR/jN8eMs\nXbqURYsWkZycXKFTdevWjXfffZeCggLy8vJYvnw5ACUlJXzzzTfceOONPPPMMxw7doy8vLyqvCoR\nKcNr3wEZYxoAS4A/Wmt/NMa4t1lrrTHGenDOUcAogNatW3urVBERkao3fQoMy3cNZATX8u4C+NtB\nLrnkEpYvX84tt9zCn//85189VWRkJHfccQdhYWG0aNGC0NBQGjduTHFxMUOHDuXYsWNYa5kwYQJN\nmjSp0ssSkf8y1p5zvj3zJMZcBCwHPrTW/l9pWxbQ21qbY4xpCayx1gaW3miItfap0v0+BKZZazf+\n0ns4HA6bnp5e6VpFRESqhb+fqye6bJdVETDMQHHJOZ8uLy+PBg0akJ+fT8+ePZk3bx6dOnXyWrki\n4mKMybDWVmhOykoP7TCurucFwM6TIbrUO8D9pa/vB94u0z7IGFPXGHMt0A74V2XrEBERqVHatYas\n09qySts9MGrUKCIiIujUqROxsbEK0SI1gDeGdnQDfgdsNcY4S9seBZ4G3jLG/B7YB9wDYK3dbox5\nC9iB6//mY621xV6oQ0REpOZ4bKZrjPSwfAjEFaIT60PCTI9OV9Hx1CJSfSodpK216wFzls19znLM\nTMCzvyQiIiK1wZA413L6FNi939UTnTDzv+0iUutpwkkREZGqMiROwVnkPKZHhIuIiIiIeEBBWkRE\nRETEAwrSIiIiIiIeUJAWEREREfGAgrSIiIiIiAcUpEVEREREPKAgLSIiIiLiAQVpEREREREPKEiL\niIiIiHhAQVpERERExAMK0iIiIiIiHlCQFhERERHxgIK0iIiIiIgHFKRFRERERDygIC0iIiIi4gEF\naRERERERDyhIi4iIiIh4QEFaRERERMQDCtIiIiIiIh5QkBYRERER8YCCtIiIiIiIBxSkRUREREQ8\noCAtIiIiIuIBBWkREREREQ8oSIuIiIiIeEBBWkRERETEAwrSIiIiIiIeUJAWEREREfGAgrSIiIiI\niAcUpEVEREREPKAgLSIiIiLiAQVpEREREREPKEiLiIiIiHjAK0HaGPOaMeY7Y8y2Mm3TjDEHjDHO\n0p/fltn2iDHmK2NMljEm2hs1iIhURnZ2NiEhIVV6/uTkZPd6eno6EyZMAODEiRPcfPPNREREkJKS\nctZzLFy4kHHjxlVZjSIicm7qeOk8C4GXgEWntT9vrU0o22CM6QAMAoKBK4GVxpjrrLXFXqpFRKTG\nORmkhwwZAoDD4cDhcACwZcsWAJxOp8/qExGRc+eVHmlr7VrghwruPgBYbK09Ya39GvgKiPJGHSIi\nlVFUVERcXBxBQUHcdddd5Ofnk5GRQa9evejcuTPR0dHk5OQAMH/+fCIjIwkPDyc2Npb8/HwA4uPj\nSU1NdZ+zQYMGAEyePJl169YRERHB888/z5o1a7jtttv47rvvGDp0KGlpaURERLBnzx4CAgI4fPgw\n4Oq57t27d/X+IkREpEKqeoz0eGPMF6VDP5qWtl0FfFNmn29L285bN9xwg69LEJEKyMrKYsyYMezc\nuZNGjRoxZ84cxo8fT2pqKhkZGQwfPpwpU6YAcOedd5KWlkZmZiZBQUEsWLDgF8/99NNP06NHD5xO\nJw899JC7/fLLL+dvf/ube1vbtm2r9BpFRMR7vDW0ozyvADMAW7p8Dhh+LicwxowCRgG0bt3a2/VV\nm88++8zXJYhIBbRq1Ypu3boBMHToUJ588km2bdvGLbfcAkBxcTEtW7YEYNu2bUydOpWjR4+Sl5dH\ndLRu9xARudBUWY+0tfagtbbYWlsCzOe/wzcOAK3K7Hp1aVt555hnrXVYax3NmzevqlKrXIMGDdxf\n4540btw4Fi5cCEBAQACPPPIIEREROBwONm/eTHR0NG3btmXu3LkArFmzhp49e9K/f38CAwN54IEH\nKCkpobi4mPj4eEJCQggNDeX555/3xSWKnBeMMaesN2zYkODgYJxOJ06nk61bt/LRRx8BriEcL730\nElu3buXxxx+noKAAgDp16lBSUgJASUkJP//88znXUfYcJ88rIiI1T5UFaWNMyzKrMcDJGT3eAQYZ\nY+oaY64F2gH/qqo6aovWrVvjdDrp0aOHe4zlpk2bePzxx937/Otf/+LFF19kx44d7Nmzh3/+8584\nnU4OHDjAtm3b2Lp1K8OGDfPhVYjUEslJ0D4A/P1cy+QkAPbv38/GjRtduyQn07VrVw4dOuRuKyws\nZPv27QDk5ubSsmVLCgsLSUpKcp86ICCAjIwMAN555x0KCwsBVyjPzc2tUHllz7FkyZJKX66IiFQN\nb01/93dgIxBojPnWGPN74FljzFZjzBfAjcBDANba7cBbwA7gA2CsZuyAO+64A4DQ0FC6dOlCw4YN\nad68OXXr1uXo0aMAREVF0aZNG/z9/Rk8eDDr16+nTZs27N27l/Hjx/PBBx/QqFEjX16GSM2XnAQT\nR0HsPki0ruXEUfD2MgIDA5kzZw5BQUEcOXLEPT764YcfJjw8nIiICPdQrRkzZtClSxe6detG+/bt\n3acfOXIkn376KeHh4WzcuJFLLrkEgLCwMPz9/QkPD//Vb44ef/xxHnzwQRwOB/7+/lX3uxARkUrx\nyhhpa+3gcprPeueNtXYmMNMb711blP2qFs78urZu3boA+Pn5uV+fXC8qKgLO/NrZGEPTpk3JzMzk\nww8/ZO7cubz11lu89tprVXUZIrXf9CkwLN81ASe4lsPyCXhlFrt2ZZ+xe0REBGvXrj2jffTo0Ywe\nPfqM9hYtWrBp0yb3+jPPPAPARRddxKpVq07Z9+RsHL179z5lZo4ePXrw5ZdfnnHu+Ph44uPjf/Hy\nRESk+ujJht52lq+Mr7nmGnbs2MGJEyc4evQon3zyyTmf+l//+hdff/01JSUlpKSk0L17dw4fPkxJ\nSQmxsbE88cQTbN682bvXI3K+2b0fAk9rCyxtFxEROQdVOWvHhefkV8bD8l0fzFmur4xNcQmtWrXi\nnnvuISQkhGuvvZaOHTue8+kjIyMZN24cX331FTfeeCMxMTHucdEne7ufeuopL1+UyHmmXWvXv83g\nMm1Zpe0iIiLnwFhrfV1DhTgcDpuenu7rMn5Z+wDXeMsyH9Dfp0Gnl/zZV1hUqVOvWbOGhIQEli9f\nXrkaRS50Z/yHF0isDwnzYEicr6sTEREfM8ZkWGsdFdlXPdLedNpXxv8+Ar3/DhOLL/h7KUVqjpNh\nefoU17/Zdq0hYaZCtIiInDP1SHtTOT3SbAeWXAPl3MQkIiIiIjXLufRI62ZDb3pspusr4u1AEa5l\nYn1Xu4iIiIicVzS0w5v0lbGIiIjIBUNB2tuGxCk4i4iIiFwANLRDRERERMQDCtIiIiIiIh5QkBYR\nERER8YCCtIiIiIiIBxSkRUREREQ8oCAtIiIiIuIBBWkREREREQ8oSIuI1zVo0MDXJYiIiFQ5BWkR\nEREREQ8oSItIlbHWMmnSJEJCQggNDSUlJQWAQYMGsWLFCvd+8fHxpKamUlxczKRJk4iMjCQsLIxX\nX33VV6WLiIj8KgVpEaky//znP3E6nWRmZrJy5UomTZpETk4O9957L2+99RYAP//8M5988gn9+/dn\nwYIFNG7cmLS0NNLS0pg/fz5ff/21j69CRESkfArSIlJl1q9fz+DBg/H396dFixb06tWLtLQ0+vXr\nx+rVqzlx4gTvv/8+PXv25OKLL+ajjz5i0aJFRERE0KVLF77//nt2797t68sQEREpVx1fFyAiF556\n9erRu3dvPvzwQ1JSUhg0aBDgGgry4osvEh0d7eMKRUREfp16pEWkcpKToH0A+Pu5lslJ7k09evQg\nJSWF4uJiDh06xNq1a4mKigLg3nvvJTExkXXr1nHrrbcCEB0dzSuvvEJhYSEAX375JT/99FN1X5GI\niEiFqEdaRDyXnAQTR8GwfAgEsva51ouKAYiJiWHjxo2Eh4djjOHZZ5/liiuuAKBv37787ne/Y8CA\nAfzmN78BYMSIEWRnZ9OpUyestTRv3pxly5b56upERER+kbHW+rqGCnE4HDY9Pd3XZYhIWe0DIHYf\nBJdp2w4suQZ2ZfumJhERkUowxmRYax0V2VdDO0TEc7v3u3qiywosbRcRETnPKUiLiOfatYas09qy\nSttFRETOcwrSIuK5x2ZCYn3XcI4iXMvE+q52ERGR85xuNhQRzw2Jcy2nT3EN52jXGhJm/rddRETk\nPKYgLSKVMyROwVlERC5IGtohIiIiIuIBBWkREREREQ8oSIuIiIiIeEBBWkRERETEAwrSIiIiIiIe\n8EqQNsa8Zoz5zhizrUzbpcaYj40xu0uXTctse8QY85UxJssYE+2NGkREREREqpO3eqQXAree1jYZ\n+MRa2w74pHQdY0wHYBAQXHrMy8YYfy/VISIiIiJSLbwSpK21a4EfTmseALxe+vp1YGCZ9sXW2hPW\n2q+Br4Aob9QhIiIiIlJdqnKMdAtrbU7p6/8ALUpfXwV8U2a/b0vbRERERERqjWq52dBaawF7rscZ\nY0YZY9KNMemHDh2qgspERERERDxTlUH6oDGmJUDp8rvS9gNAqzL7XV3adgZr7TxrrcNa62jevHkV\nlioiIiIicm6qMki/A9xf+vp+4O0y7YOMMXWNMdcC7YB/VWEdIiIiIiJeV8cbJzHG/B3oDTQzxnwL\nPA48DbxljPk9sA+4B8Bau90Y8xawAygCxlpri71Rh4iIiIhIdfFKkLbWDj7Lpj5n2X8mMNMb7y0i\nIiIi4gt6sqGIiIiIiAcUpEVEREREPKAgLSIiIiLiAQVpEREREREPKEiLiIiIiHhAQVpERERExAMK\n0iIiIiIiHlCQFhERERHxgIK0iIiIiIgHFKRFRERERDygIC0iIiIiNVZ2djYhISG+LqNcCtIiIiIi\nIh5QkBYRERGRGq2oqIi4uDiCgoK46667yM/PJyMjg169etG5c2eio6PJyckBYP78+URGRhIeHk5s\nbCz5+fkAxMfHM2HCBG644QbatGlDamoqADk5OfTs2ZOIiIiTPd8NKlqXgrSIiIiI1GhZWVmMGTOG\nnTt30qhRI+bMmcP48eNJTU0lIyOD4cOHM2XKFADuvPNO0tLSyMzMJCgoiAULFrjPk5OTw/r161m+\nfDmTJ08GIDk5mejoaJxOJ5mZmQD5Fa2rjlevUkRERETEy1q1akW3bt0AGDp0KE8++STbtm3jlltu\nAaC4uJiWLVsCsG3bNqZOncrRo0fJy8sjOjrafZ6BAwfi5+dHhw4dOHjwIACRkZEMHz6cwsJCBg4c\nCFBS0boUpEVERESkRjPGnLLesGFDgoOD2bhx4xn7xsfHs2zZMsLDw1m4cCFr1qxxb6tbt677tbUW\ngJ49e7J27VpWrFhBfHw8wGUVrUtDO0RERESk5khOgvYB4O/nWr69jP3797tDc3JyMl27duXQoUPu\ntsLCQrZv3w5Abm4uLVu2pLCwkKSkpF99u3379tGiRQtGjhzJiBEjAOpXtFT1SIuIiIhIzZCcBBNH\nwbB8CASy9sHMRwhs2ZI5c+YwfPhwOnTowPjx44mOjmbChAkcO3aMoqIi/vjHPxIcHMyMGTPo0qUL\nzZs3p0uXLuTm5v7iW65Zs4a//vWvXHTRRTRo0ADgYEXLNSe7tWs6h8Nh09PTfV2GiIiIiFSV9gEQ\nuw+Cy7RtB5ZcA7uyq6UEY0yGtdZRkX01tENEREREaobd+1090WUFlrbXQArSIiIiIlIztGsNWae1\nZZW210AK0iIiIiJSMzw2ExLru4ZzFOFaJtZ3tddAutlQRERERGqGIXGu5fQpruEc7VpDwsz/ttcw\nCtIiIiJVoKioiDp19DErcs6GxNXY4Hw6De0QERHxwIwZMwgMDKR79+4MHjyYhIQEevfuzR//+Ecc\nDgcvvPAChw4dIjY2lsjISCIjI9mwYQMAP/30E8OHDycqKoqOHTvy9ttvA7Bw4ULuvPNObr31Vtq1\na8ef/vQnX16iiPwK/VdZRETkHKWlpbFkyRIyMzMpLCykU6dOdO7cGYCff/6Zk9O1DhkyhIceeoju\n3buzf/9+oqOj2blzJzNnzuSmm27itdde4+jRo0RFRXHzzTcD4HQ62bJlC3Xr1iUwMJDx48fTqlUr\nn12riJydgrSIiMg52rBhAwMGDKBevXrUq1eP22+/3b3t3nvvdb9euXIlO3bscK//+OOP5OXl8dFH\nH/HOO++QkJAAQEFBAfv3u6b36tOnD40bNwagQ4cO7Nu3T0FapIZSkBYREfk1yUmn3vwU2QPatCl3\n10suucT9uqSkhE2bNlGvXr1T9rHWsmTJEgIDT50w9/PPP6du3brudX9/f4qKirx4ISLiTRojLSIi\n8ktOPrI4dh8kWojdR7f3/8G7i16noKCAvLw8li9fXu6hffv25cUXX3SvO51OAKKjo3nxxRc5+XTh\nLVu2VP11iIjXKUiLiIj8kulTYFi+65HFdYBgiPzDCe7IPUpYWBj9+vUjNDTUPRyjrNmzZ5Oenk5Y\nWBgdOnRg7ty5APz5z3+msLCQsLAwgoOD+fOf/1y91yQiXmFO/m+4pnM4HPbkzRsiIiLVxt/P1RNd\ndjBkEeTFQ4MSS35+Pj179mTevHl06tTJV1WKiJcYYzKstY6K7Ksx0iIiIr+kXWvI2ufqkT4pC0Y1\nqM+OiAgKCgq4//77FaJFLkAK0iIiIr/ksZmuMdLD8iEQyAIS65M8d16teWiEiFQNBWkREZFfUsse\nWSwi1afKg7QxJhvIBYqBImutwxhzKZACBADZwD3W2iNVXYuIiIhHatEji0Wk+lTXrB03Wmsjygzc\nngx8Yq1tB3xSui4iIiIiUmv4avq7AcDrpa9fBwb6qA4REREREY9UR5C2wEpjTIYxZlRpWwtrbU7p\n6/8ALaqhDhERERERr6mOmw27W2sPGGMuBz42xuwqu9Faa40x5U5mXRq8RwG0bt266isVEREREamg\nKu+RttYeKF1+BywFooCDxpiWAKXL785y7DxrrcNa62jevHlVlyoiIiIiUmFVGqSNMZcYYxqefA30\nBbYB7wD3l+52P/B2VdYhIiIiIuJtVT20owWw1Bhz8r2SrbUfGGPSgLeMMb8H9gH3VHEdIiIiIiJe\nVaVB2lq7Fwgvp/17oE9VvreIiIiISFXy1fR3IiIiIiK1moK0iIiIiIgHFKRFRERERDygIC0iIiIi\n4gEFaRERERERDyhIi4iIiIh4QEFaRERERMQDCtIiIiIiIh5QkBYREfFAdnY2ISEhZ7T37t2b9PR0\nH1QkItVNQVpERERExAMK0iIiIh4qKioiLi6OoKAg7rrrLvLz80/Z3qBBA/fr1NRU4uPjATh06BCx\nsbFERkYSGRnJhg0bqrNsEfESBWkREREPZWVlMWbMGHbu3EmjRo14+eWXK3Tcgw8+yEMPPURaWhpL\nlixhxIgRVVypiFSFOr4uQEREpLZq1aoV3bp1A2Do0KHMnj27QsetXLmSHTt2uNd//PFH8vLyTunB\nFpGaT0FaRETEQ8aYCq8XFBS4X5eUlLBp0ybq1atXtQWKSJXS0A4R8cibb75JVFQUERER/OEPf6C4\nuJgFCxZw3XXXERUVxciRIxk3bhwAe/bsoWvXroSGhjJ16lR3r1tOTg49e/YkIiKCkJAQ1q1b58tL\nEjm75CRoHwD+fq5lchIA+/fvZ+PGja5dkpPp3r37KYe1aNGCnTt3UlJSwtKlS93tffv25cUXX3Sv\nO53OKr8EEfE+BWkROWc7d+4kJSWFDRs24HQ68ff3JykpiRkzZrBp0yY2bNjArl273Ps/+OCDPPjg\ng2zdupWrr77a3Z6cnEx0dDROp5PMzEwiIiJ8cTkivyw5CSaOgth9kGhdy4mj4O1lBAYGMmfOHIKC\ngjhy5AijR48+5dCnn36a2267jRtuuIGWLVu622fPnk16ejphYWF06NCBuXPnVvdViYgXGGutr2uo\nEIfDYTUvp0jN8NJLL/Hkk09y+eWXA3D8+HEuvvhiwsPDef311wFXUPjyyy956aWXuOyyyzh48CB1\n6tThxx9/5MorryQvL4+1a9cyfPhwhg4dysCBAxWkpWZqH+AKz8Fl2rYDS66BXdm+qUlEqowxJsNa\n66jIvuqRFpFzZq3l/vvvx+l04nQ6ycrKYtq0aed8np49e7J27Vquuuoq4uPjWbRokfeLFams3fsh\n8LS2wNJ2EbmgKUiLyC8rZ2xonz59SE1N5bvvvgPghx9+oGPHjnz66accOXKEoqIilixZ4j5F165d\n3euLFy92t+/bt48WLVowcuRIRowYwebNm6vzykQqpl1ryDqtLau0XUQuaArSInJ2Zxkb2sG5hSee\neIK+ffsSFhbGLbfcQk5ODo8++ihRUVF069aNgIAAGjduDMCsWbP4v//7P8LCwvjqq6/c7WvWrCE8\nPJyOHTuSkpLCgw8+6MurFSnfYzMhsb5rOEcRrmVifVe7iFzQNEZaRM7uHMeGnpwHt6ioiJiYGIYP\nH05MTAz5+flcfPHFGGNYvHgxf//733n77ber6SJEvCA5CaZPcQ3naNfaFaKHxPm6KhGpAucyRlrz\nSIvI2Z3j2NBp06axcuVKCgoK6Nu3LwMHDgQgIyODcePGYa2lSZMmvPbaa1Vbt4i3DYlTcBaRM6hH\nWkTOTrMViIjIBUazdoiId2hsqIiIyFlpaIeInN3Jr7LLjg1N0NhQERERUJAWkV+jsaEiIiLl0tAO\nEREREREPKEiLiIiIiHhAQfocZGdnExIS4vXzTps2jYSEhDPad+3aRUREBB07dmTPnj3ndM6FCxfy\n73//21slioiIiMhpFKS9rLi42GvnWrZsGXfddRdbtmyhbdu253SsgrSIiIhI1VKQPkdFRUXExcUR\nFBTEXXfdRX5+PgEBATz88MN06tSJf/zjH+zZs4dbb72Vzp0706NHD3bt2gXAu+++S5cuXejYsSM3\n33wzBw8ePOP88+fPp1+/fqxYsYJZs2bxyiuvcOONNwIwcOBAOnfuTHBwMPPmzQNcwT0+Pp6QkBBC\nQ0N5/vnnSU1NJT09nbi4OCIiIjh+/Hj1/YJERERELhCateMcZWVlsWDBArp168bw4cN5+eWXAbjs\nssvYvHkzAH369GHu3Lm0a9eOzz//nDFjxrBq1Sq6d+/Opk2bMMbwt7/9jWeffZbnnnvOfe6XXnqJ\njz/+mGXLllG3bl0eeOABGjRowMSJEwF47bXXuPTSSzl+/DiRkZHExsaSnZ3NgQMH2LZtGwBHjx6l\nSZMmvPTSSyQkJOBwVGg+cRERERE5RwrS56hVq1Z069YNgKFDhzJ79mwA7r33XgDy8vL47LPPuPvu\nu93HnDhxAoBvv/2We++9l5ycHH7++WeuvfZa9z6LFi2iVatWLFu2jIsuuqjc9549ezZLly4F4Jtv\nvmH37t0EBgayd+9exo8fT//+/enbt6/3L1pEREREzqChHWeTnOR6PLK/n2uZnASAMeaU3U6uX3LJ\nJQCUlJTQpEkTnE6n+2fnzp0AjB8/nnHjxrF161ZeffVVCgoK3OcJDQ0lOzubb7/9ttxy1qxZw8qV\nK9m4cSOZmZl07NiRgoICmjZtSmZmJr1792bu3LmMGDHCy78IERERESmPz4K0MeZWY0yWMeYrY8xk\nX9VRruQkmDgKYvdBonUtJ46Ct5exf/9+Nm7c6NotOZnu3bufcmijRo249tpr+cc//gGAtZbMzEwA\njh07xlVXXQXA66+/fspxHTt25NVXX+WOO+4o9ybBY8eO0bRpU+rXr8+uXbvYtGkTAIcPH6akpITY\n2FieeOIJ9/CShg0bkpub68VfioiIiIiU5ZMgbYzxB+YA/YAOwGBjTAdf1FKu6VNgWD4E4xr8Eoxr\nfXYCgYHtyeBeAAAgAElEQVSBzJkzh6CgII4cOcLo0aPPODwpKYkFCxYQHh5OcHAwb7/9NuCa5u7u\nu++mc+fONGvW7IzjunfvTkJCAv379+fw4cOnbLv11lspKioiKCiIyZMn07VrVwAOHDhA7969iYiI\nYOjQoTz11FMAxMfH88ADD+hmQxHxqYCAgDP+nolIzVFVU/teKIy1tvrf1JjrgWnW2ujS9UcArLVP\nne0Yh8Nh09PTq6dAfz9XT3TZEeRFwDADxSXVU4OIyHkgICCA9PT0cjsPRMT3srOzue2229yTFpSn\nuLgYf3//aqzKt4wxGdbaCs3W4KuhHVcB35RZ/7a0rWZo1xqyTmvLKm0XEZFy/fTTT/Tv35/w8HBC\nQkJISUlxbzt+/Dj9+vVj/vz5PPbYY8yaNcu9bcqUKbzwwgu+KFlEqNjUvk6nk65duxIWFkZMTAxH\njhzhu+++o3PnzgBkZmZijGH//v0AtG3blvz8fOLj45kwYQI33HADbdq0ITU11ZeX6nU1+mZDY8wo\nY0y6MSb90KFD1ffGj82ExPqwHVdP9HZc64/NrL4aRERqmQ8++IArr7ySzMxMtm3bxq233gq4ZjO6\n/fbbGTx4MCNHjmT48OEsWrQIcN2gvXjxYoYOHerL0kUuaFlZWYwZM4adO3fSqFGjM6b2HTRoEPfd\ndx/PPPMMX3zxBaGhofzlL3/h8ssvp6CggB9//JF169bhcDhYt24d+/bt4/LLL6d+/foA5OTksH79\nepYvX87kyTXrtrjK8lWQPgC0KrN+dWnbKay186y1Dmuto3nz5tVWHEPiIGEeLLnGNZxjyTWu9SFx\n1VeDiEgtExoayscff8zDDz/MunXraNy4MQADBgxg2LBh3HfffYBruMdll13Gli1b+Oijj+jYsSOX\nXXaZL0sXuaCdPrXv+vXrgf9O7Xvs2DGOHj1Kr169ALj//vtZu3YtADfccAMbNmxg7dq1PProo6xd\nu5Z169bRo0cP9/kHDhyIn58fHTp0KPdhdLWZr4J0GtDOGHOtMeY3wCDgHR/VUr4hcbAr2zUmele2\nQrSIyOlOmyb0uvQ0Nm/eTGhoKFOnTmX69OkAdOvWjQ8++ICy9+SMGDGChQsXkpiYyPDhw310ASIC\nvz617y/p2bOnuxd6wIABZGZmsn79+lOCdN26dd2vfXFvXlXySZC21hYB44APgZ3AW9ba7b6oRURE\nPFDONKH/fmgE9d95m6FDhzJp0iT3dJzTp0+nadOmjB071n14TEwMH3zwAWlpaURHR/vqKkQuPKc/\nJ6MCU/s2btyYpk2bsm7dOgDeeOMNd+90jx49ePPNN2nXrh1+fn5ceumlvPfee2ec43zlszHS1tr3\nrLXXWWvbWms1+FhEpDYpZ5rQrTcVEPWHPxAREcFf/vIXpk6d6t79hRde4Pjx4/zpT38C4De/+Q03\n3ngj99xzzwU1G4CIT5X3nIyZjxDYsuWvTu37+uuvM2nSJMLCwnA6nTz22GOAa6iWtZaePXsCrql8\nmzRpQtOmTav10nzFJ9PfeaJap78TEZFfVslpQktKStyzAbRr167KyhSRMtoHuMJzcJm27bjuBduV\n7ZuaaqDaMP2diIjUZpWYJnTHjh38z//8D3369FGIFqlOu/dD4GltgaXt4pE6v76LiIjIaR6b6fqK\neFi+64M4C9c0oQm/PlKvQ4cO7N27t8pLFJHTtGsNWaf1SOs5GZWiHmkRETl3miZUpPbRczK8Tj3S\nIiLimSFxCs4itcnJf6/Tp7iGc7Rr7foWSf+OPaYgLSIiInKh0H+AvUpDO0REREREPKAgLSIiIiLi\nAQVpEREREREPKEiLiIiIiHhAQVpERERExAMK0iIiIiIiHlCQFhERERHxgIK0iIiIiIgHFKRFRERE\nRDygIC0iIiIi4gEFaRERERERDyhIi4iIiIh4QEFaRERERMQDCtIiIiIiIh5QkBYRERER8YCCtIiI\niIiIBxSkRUREREQ8oCAtIiIiIuIBBWkREREREQ8oSIuIiIiIeEBBWkRERETEAwrSIiIiIiIeUJAW\nEREREfGAgrSIiIiIiAcUpEVEREREPKAgLSIiIiLiAQVpEREREREPKEiLiIiIiHigyoK0MWaaMeaA\nMcZZ+vPbMtseMcZ8ZYzJMsZEV1UNIiIiUrtlZ2cTEhLi6zJEylWnis//vLU2oWyDMaYDMAgIBq4E\nVhpjrrPWFldxLSIiIiIiXuOLoR0DgMXW2hPW2q+Br4AoH9QhIiIitUBxcTEjR44kODiYvn37cvz4\ncebPn09kZCTh4eHExsaSn58PQHx8PKNHj6Zr1660adOGNWvWMHz4cIKCgoiPj/fthch5p6qD9Hhj\nzBfGmNeMMU1L264Cvimzz7elbSIiIiJn2L17N2PHjmX79u00adKEJUuWcOedd5KWlkZmZiZBQUEs\nWLDAvf+RI0fYuHEjzz//PHfccQcPPfQQ27dvZ+vWrTidTh9eiZxvKhWkjTErjTHbyvkZALwCtAEi\ngBzgOQ/OP8oYk26MST906FBlShUREZFa6tprryUiIgKAzp07k52dzbZt2+jRowehoaEkJSWxfft2\n9/633347xhhCQ0Np0aIFoaGh+Pn5ERwcTHZ2to+uQs5HlRojba29uSL7GWPmA8tLVw8Arcpsvrq0\nrbzzzwPmATgcDut5pSIiIlJb1a1b1/3a39+f48ePEx8fz7JlywgPD2fhwoWsWbPmjP39/PxOOdbP\nz4+ioqJqq1vOf1U5a0fLMqsxwLbS1+8Ag4wxdY0x1wLtgH9VVR0iIiJSiyQnQfsA8PdzLd9eVu5u\nubm5tGzZksLCQpKSkqq1RJGTqnLWjmeNMRGABbKBPwBYa7cbY94CdgBFwFjN2CEiIiIkJ8HEUTAs\nHwKBrH0w8xGo2+yMXWfMmEGXLl1o3rw5Xbp0ITc3t/rrlQuesbZ2jJhwOBw2PT3d12WIiIhIVWkf\nALH7XBPknrQdWHIN7Mr2TU1ywTHGZFhrHRXZV082FPGyo0eP8vLLL5/TMfHx8aSmplZRRSIitcTu\n/a6e6LICS9tFaiAFaREv8yRIi4gI0K41ZJ3WllXaLlIDKUiLeNnkyZPZs2cPERERTJo0iUmTJhES\nEkJoaCgpKSkAWGsZN24cgYGB3HzzzXz33Xfu46dPn05kZCQhISGMGjUKay179uyhU6dO7n127959\nyrqIyHnhsZmQWN81nKMI1zKxvqtdpAZSkBbxsqeffpq2bdvidDrp2rUrTqeTzMxMVq5cyaRJk8jJ\nyWHp0qVkZWWxY8cOFi1axGeffeY+fty4caSlpbFt2zaOHz/O8uXLadu2LY0bN3Y/SCAxMZFhw4b5\n6hJFRKrGkDhImOcaEz3MuJYJ81ztIjWQgrRIFVq/fj2DBw/G39+fFi1a0KtXL9LS0li7dq27/cor\nr+Smm25yH7N69Wq6dOlCaGgoq1atcj9kYMSIESQmJlJcXExKSgpDhgzx1WWJiFSdIXGuGwuLS1xL\nhWipwRSkRWqQgoICxowZQ2pqKlu3bmXkyJEUFBQAEBsby/vvv8/y5cvp3Lkzl112mY+rFRERubAp\nSItU1mkPD2j44Qfu+Ux79OhBSkoKxcXFHDp0iLVr1xIVFUXPnj3d7Tk5OaxevRrAHZqbNWtGXl7e\nKTN51KtXj+joaEaPHq1hHSIiIjVAVT6QReT8V87DAy77y//SLSCckJAQ+vXrR1hYGOHh4RhjePbZ\nZ7niiiuIiYlh1apVdOjQgdatW3P99dcD0KRJE0aOHElISAhXXHEFkZGRp7xdXFwcS5cupW/fvj64\nWBERESlLD2QRqYxqfnhAQkICx44dY8aMGV4/t4iIiJzbA1nUIy1SGdX48ICYmBj27NnDqlWrvH5u\nEREROXcK0iKV0a41ZJ3WI11FDw9YunSp188pIiIintPNhiKVoYcHiIiIXLDUIy1SGSfnN50+xTWc\no11rSJipeU9FREQuAArSIpU1JE7BWURE5AKkoR0iIiIiIh5QkBYRERER8YCCtIiIiIiIBxSkRURE\nREQ8oCAtIiIiIuIBBWkREREREQ8oSIuIiIiIeEBBWkRERETEAwrSIiIiIiIeUJAWEREREfGAgrSI\niIjUGNnZ2YSEhPi6DJEKUZAWOc9MmzaNhIQEX5chIiJy3lOQFhERkRqlqKiIuLg4goKCuOuuu8jP\nz2f69OlERkYSEhLCqFGjsNYC8NVXX3HzzTcTHh5Op06d2LNnD9ZaJk2aREhICKGhoaSkpACwZs0a\nevfuzV133UX79u2Ji4tzn0fEEwrSIueBmTNnct1119G9e3eysrIAcDqddO3albCwMGJiYjhy5AgA\naWlphIWFERER4f6gERGpSbKyshgzZgw7d+6kUaNGvPzyy4wbN460tDS2bdvG8ePHWb58OQBxcXGM\nHTuWzMxMPvvsM1q2bMk///lPnE4nmZmZrFy5kkmTJpGTkwPAli1bmDVrFjt27GDv3r1s2LDBl5cq\ntZyCtEgtl5GRweLFi3E6nbz33nukpaUBcN999/HMM8/wxRdfEBoayl/+8hcAhg0bxquvvorT6cTf\n39+XpYuIlKtVq1Z069YNgKFDh7J+/XpWr15Nly5dCA0NZdWqVWzfvp3c3FwOHDhATEwMAPXq1aN+\n/fqsX7+ewYMH4+/vT4sWLejVq5f7b2NUVBRXX301fn5+REREkJ2d7avLlPOAgrRILbdu3TpiYmKo\nX78+jRo14o477uCnn37i6NGj9OrVC4D777+ftWvXcvToUXJzc7n++usBGDJkiC9LFxEplzHmjPUx\nY8aQmprK1q1bGTlyJAUFBR6du27duu7X/v7+FBUVVapWubApSIuIiIjvJCdB+wDw93Mt317G/v37\n2bhxo2tzcjLdu3cHoFmzZuTl5ZGamgpAw4YNufrqq1m2bBkAJ06cID8/nx49epCSkkJxcTGHDh1i\n7dq1REVF+eLq5DynIC1S25z2odPzpzyWLVvG8ePHyc3N5d133+WSSy6hadOmrFu3DoA33niDXr16\n0aRJExo2bMjnn38OwOLFi314ISJywUtOgomjIHYfJFrXcuYjBLZsyZw5cwgKCuLIkSOMHj2akSNH\nEhISQnR0NJGRke5TvPHGG8yePZuwsDBuuOEG/vOf/xATE0NYWBjh4eHcdNNNPPvss1xxxRU+vFA5\nX5nacreqw+Gw6enpvi5DxLdOfugMy4dAIAtIrM/M7v153enk8ssvp3Xr1nTq1Imbb76ZBx54gPz8\nfNq0aUNiYiJNmzbl888/Z+TIkfj5+dGrVy/S09N1s42I+Eb7AFd4Di7Tth1Ycg3syvZNTXLBM8Zk\nWGsdFdpXQVqkFvHCh05eXh4NGjQA4OmnnyYnJ4cXXnjB25We92bPns0rr7xCp06dSEpK8nU5IrWT\nv5+rJ7pOmbYiYJiB4hJfVSUXuHMJ0pUa2mGMudsYs90YU2KMcZy27RFjzFfGmCxjTHSZ9s7GmK2l\n22ab0+8oEJGz273f1RNdVmBpewWtWLGCiIgIQkJCWLduHVOnTvVqiReKl19+mY8//lghWqQy2rV2\nfbNWVlZpu0gtUNkx0tuAO4G1ZRuNMR2AQbj6zW4FXjbGnJxn6xVgJNCu9OfWStYgcuHwwofOvffe\ni9PpZNu2baxYsYLmzZt7tcQLwQMPPMDevXvp168fzz33HAMHDiQsLIyuXbvyxRdfAPDggw8yffp0\nAD788EN69uxJSYl62ERO8dhMSKzv+matCNcysb6rXaQWqFSQttbutNae/rEOMABYbK09Ya39GvgK\niDLGtAQaWWs3WdeYkkXAwMrUIHJB0YdOjTB37lyuvPJKVq9eTXZ2Nh07duSLL77gySef5L777gPg\nqaeeIiUlhdWrVzNhwgQSExPx89P93SKnGBIHCfNcw9OGGdcyYZ6rXaQWqPPru3jkKmBTmfVvS9sK\nS1+f3i4iFXHyw2X6FNdwjnatIWGmPnR8aP369SxZsgSAm266ie+//54ff/yRRo0aMX/+fHr27Mnz\nzz9P27ZtfVypSA01JE5/w6TW+tUgbYxZCZQ3Z8wUa+3b3i/plPceBYwCaN1a46VEAH3o1CJbt27l\nsssu49///revSxERkSrwq98zWmtvttaGlPPzSyH6ANCqzPrVpW0HSl+f3n62955nrXVYax0ax/nr\nTs7EICJedvoDI5L/e4Nhjx493DccrlmzhmbNmtGoUSP27dvHc889x5YtW3j//ffdc3eLiMj5o6oG\n7L0DDDLG1DXGXIvrpsJ/WWtzgB+NMV1LZ+u4D6jSXm0RkUop74ERE0fBTz8BMG3aNDIyMggLC2Py\n5Mm8/vrrWGv5/e9/T0JCAldeeSULFixgxIgRHj/SWEREaqZKzSNtjIkBXgSaA0cBp7U2unTbFGA4\nrlui/mitfb+03QEsBC4G3gfG2woUoXmkf12DBg3Iy8sjLy+PAQMGcOTIEQoLC3niiScYMGAAc+fO\nZe7cuQAcO3aMgIAAfve73/HFF18wa9YsAObPn8+OHTt4/vnnfXkpIjWHHhghInJB0QNZLlAng3RR\nURH5+fk0atSIw4cP07VrV3bv3s3JKbsLCwu56aab+NOf/sSNN95IeHg4u3bt4qKLLuKGG27g1Vdf\nJTQ01MdXI1JD6IERIiIXlHMJ0lU1a4f4kLWWRx99lLVr1+Ln58eBAwc4ePAgV1zhumf0wQcf5Kab\nbuL2228HXDMNLF++nKCgIAoLCxWiRcpq1xqyTuuR1gMjRESEqhsjLT6UlJTEoUOHyMjIwOl00qJF\nC/fYzIULF7Jv3z4ef/xx9/4jRoxg4cKFJCYmMmzYMF+VLVIzae5uEfGyn376if79+xMeHk5ISAgp\nKSlMnz6dyMhIQkJCGDVqFCdHDPTu3ZuT38gfPnyYgIAAALZv305UVBQRERGEhYWxe/duAAYOHEjn\nzp0JDg5m3rx57vdcsGAB1113HVFRUYwcOZJx48YBcOjQIWJjY4mMjCQyMpINGzYA8OmnnxIREUFE\nRAQdO3YkNze3un49tYu1tlb8dO7c2cppkt60NvAaa/2MtYHX2Evq1rXWWjtr1iw7btw4a621q1at\nsoD9+uuvbXp6ug0ODrY//PDDGafq2LGjvfrqq8vdJnLBO+3fmk1609cViUgtlpqaakeMGOFeP3r0\nqP3+++/d60OHDrXvvPOOtdbaXr162bS0NGuttYcOHbLXXHONtdbacePG2TffdP0tOnHihM3Pz7fW\nWvd58vPzbXBwsD18+LA9cOCAveaaa+z3339vf/75Z9u9e3c7duxYa621gwcPtuvWrbPWWrtv3z7b\nvn17a621t912m12/fr211trc3FxbWFhYJb+LmghItxXMpxraUVudnElgWD4E4vrq+SlXe1xcHLff\nfjuhoaE4HA7at28PwEsvvcQPP/zAjTfeCIDD4eBvf/sbAPfccw9Op5OmTZv66IJEajDN3S0iXhQa\nGsr//u//8vDDD3PbbbfRo0cPlixZwrPPPkt+fj4//PADwcHB7iGY5bn++uuZOXMm3377LXfeeSft\n2rUDYPbs2SxduhSAb775ht27d/Of//yHXr16cemllwJw99138+WXXwKwcuVKduzY4T7vjz/+SF5e\nHt26deP//b//R1xcHHfeeSdXX301ciYF6dpq+hRXiD45bjMY8h5xtTcbEsfGjRvPOCQxMfGsp1u/\nfj0PPfRQ1dQqIiIibtdddx2bN2/mvffeY+rUqfTp04c5c+aQnp5Oq1atmDZtmntIZp06dSgpcd3Y\nXHYKzSFDhtClSxdWrFjBb3/7W1599VX8/PxYuXIlGzdupH79+vTu3ftXp90sKSlh06ZN1KtX75T2\nyZMn079/f9577z26devGhx9+6O6Yk//SGOnaavd+V090WYGl7efg6NGjXHfddVx88cX06dPHa+WJ\niIhIqdMe6vTvOS9Rv359hg4dyqRJk9i8eTMAzZo1Iy8vj9TUVPehAQEBZGRkAJzSvnfvXtq0acOE\nCRMYMGAAX3zxBceOHaNp06bUr1+fXbt2sWnTJgAiIyP59NNPOXLkCEVFRSxZssR9nr59+/Liiy+6\n151OJwB79uwhNDSUhx9+mMjISHbt2lVlv57aTD3StZWXZhJo0qSJ++sdERER8bJyhmJufWwik555\nFr9LL+Wiiy7ilVdeYdmyZYSEhHDFFVcQGRnpPnzixIncc889zJs3j/79+7vb33rrLd544w0uuugi\nrrjiCh599FEuueQS5s6dS1BQEIGBgXTt2hWAq666ikcffZSoqCguvfRS2rdvT+PGjQHXUJCxY8cS\nFhZGUVERPXv2ZO7cucyaNYvVq1fj5+dHcHAw/fr1q9ZfW22heaRrqzP+YeKaSSBhnsZyioiI1BQ1\n5KFOeXl5NGjQgKKiImJiYhg+fDgxMTHV9v61ieaRvhCcDMvTp7iGc7RrDQkzFaJFRERqEi8Nxays\n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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fcc4904d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.manifold import TSNE\n",
    "\n",
    "tsne = TSNE(n_components=2, random_state=0, n_iter=5000, perplexity=3)\n",
    "np.set_printoptions(suppress=True)\n",
    "T = tsne.fit_transform(word_glove_vectors)\n",
    "labels = unique_words\n",
    "\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n",
    "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n",
    "    plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cluster documents with GloVe Embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Document</th>\n",
       "      <th>Category</th>\n",
       "      <th>ClusterLabel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>The sky is blue and beautiful.</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Love this blue and beautiful sky!</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The quick brown fox jumps over the lazy dog.</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A king's breakfast has sausages, ham, bacon, eggs, toast and beans</td>\n",
       "      <td>food</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>I love green eggs, ham, sausages and bacon!</td>\n",
       "      <td>food</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>The brown fox is quick and the blue dog is lazy!</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>The sky is very blue and the sky is very beautiful today</td>\n",
       "      <td>weather</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>The dog is lazy but the brown fox is quick!</td>\n",
       "      <td>animals</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                             Document  \\\n",
       "0                                      The sky is blue and beautiful.   \n",
       "1                                   Love this blue and beautiful sky!   \n",
       "2                        The quick brown fox jumps over the lazy dog.   \n",
       "3  A king's breakfast has sausages, ham, bacon, eggs, toast and beans   \n",
       "4                         I love green eggs, ham, sausages and bacon!   \n",
       "5                    The brown fox is quick and the blue dog is lazy!   \n",
       "6            The sky is very blue and the sky is very beautiful today   \n",
       "7                         The dog is lazy but the brown fox is quick!   \n",
       "\n",
       "  Category  ClusterLabel  \n",
       "0  weather             2  \n",
       "1  weather             2  \n",
       "2  animals             1  \n",
       "3     food             0  \n",
       "4     food             0  \n",
       "5  animals             1  \n",
       "6  weather             2  \n",
       "7  animals             1  "
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "doc_glove_vectors = np.array([nlp(str(doc)).vector for doc in norm_corpus])\n",
    "\n",
    "km = KMeans(n_clusters=3, random_state=0)\n",
    "km.fit_transform(doc_glove_vectors)\n",
    "cluster_labels = km.labels_\n",
    "cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])\n",
    "pd.concat([corpus_df, cluster_labels], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Leveraging gensim for building a FastText model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from gensim.models.fasttext import FastText\n",
    "\n",
    "wpt = nltk.WordPunctTokenizer()\n",
    "tokenized_corpus = [wpt.tokenize(document) for document in norm_bible]\n",
    "\n",
    "# Set values for various parameters\n",
    "feature_size = 100    # Word vector dimensionality  \n",
    "window_context = 50          # Context window size                                                                                    \n",
    "min_word_count = 5   # Minimum word count                        \n",
    "sample = 1e-3   # Downsample setting for frequent words\n",
    "\n",
    "\n",
    "ft_model = FastText(tokenized_corpus, size=feature_size, window=window_context, \n",
    "                    min_count=min_word_count,sample=sample, sg=1, iter=50)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'egypt': ['land', 'pharaoh', 'egyptians', 'pathros', 'assyrian'],\n",
       " 'famine': ['pestilence', 'sword', 'egypt', 'dearth', 'blasted'],\n",
       " 'god': ['lord', 'therefore', 'jesus', 'christ', 'truth'],\n",
       " 'gospel': ['preached', 'preach', 'christ', 'preaching', 'gentiles'],\n",
       " 'jesus': ['christ', 'god', 'disciples', 'paul', 'grace'],\n",
       " 'john': ['baptist', 'baptize', 'peter', 'philip', 'baptized'],\n",
       " 'moses': ['aaron', 'commanded', 'congregation', 'spake', 'tabernacle'],\n",
       " 'noah': ['shem', 'methuselah', 'creepeth', 'adam', 'milcah']}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# view similar words based on gensim's model\n",
    "similar_words = {search_term: [item[0] for item in ft_model.wv.most_similar([search_term], topn=5)]\n",
    "                  for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n",
    "similar_words"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABB0AAAJCCAYAAACMDb+GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVde9///3EqemTqnYNBgS5AciIoOCiBNV1Ggbk5sB\nb5za2DRGHDKRmuQ2A5KkfSQpD28q1Zr40xpzQ2pFk6hN+60TQRyqRwRxLEdKHPBaS5ynAK7vH+r5\nimLUcDYH9PV8PHjk7LXXXuuzzyP/7LfrrG2stQIAAAAAAPC2Rr4uAAAAAAAA3JwIHQAAAAAAgCMI\nHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAA\nAAAAgCMa+7qAq/H397dBQUG+LgMAAAAAAFxm06ZN/7bWtrtWv3obOgQFBcnlcvm6DAAAAAAAcBlj\nzJfX04+fVwAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAA\nAEfUOnQwxjQ3xmwwxhQaY7YZY9Jr6NPMGDPfGOM2xvzdGBNU23kBAAAAAED95o2VDmclJVlroyXF\nSBpijEm4rM/PJR221oZI+m9Jb3thXgAAAAAAUI/VOnSw5524cNjkwp+9rNt/SPrgwudsSQOMMaa2\ncwMAAAAAgPrLK3s6GGP8jDEFkv4laZm19u+XdWkvaa8kWWsrJR2V1NYbcwMAAAAAgPrJK6GDtbbK\nWhsj6S5J8caYLt9mHGPMk8YYlzHGdejQIW+UBgAAAAAAfMSrb6+w1h6RtErSkMtO7ZcUKEnGmMaS\nWksqr+H69621cdbauHbt2nmzNAAAAAAAUMe88faKdsaYNhc+f0fSIEk7L+u2WNJjFz4nS1pprb18\n34dbSmlpqbp0+VYLQqrJycnR2rVrPcczZ87UvHnzrrs/AAAAAABOaeyFMe6U9IExxk/nQ4w/WWuX\nGmNel+Sy1i6WNFvSh8YYt6SvJA33wrzQ+RChRYsW6tWrlyQpJSXlhvoDAAAAAOAUU18XHMTFxVmX\ny+XrMhxTWlqqIUOGKDY2Vvn5+YqIiNC8efOUkZGhJUuW6PTp0+rVq5fee+89GWPUr18/RUdH64sv\nvlBlZaXmzJmjr7/+Wv369dMdd9yhdu3aKTMzUytWrFCLFi30i1/8QtOmTdPMmTPVuHFjde7cWW+9\n9ZYSEhLk5+fn6d+3b1/l5OSoadOmniBi5syZuu222/TTn/7Ux98SAAAAAKA+MsZsstbGXaufV/d0\nwI3ZtWuXJkyYoB07dqhVq1aaMWOGJk2apI0bN2rr1q06ffq0li5d6ul/6tQpFRQUaMaMGXr88cd1\n11136Xvf+56ee+45FRQUqG/fvtXGf+utt7R582Zt2bJFM2fOVFBQkFJSUq7of/lPLlJSUggcAAAA\nAAC1RujgQ4GBgerdu7ckafTo0crLy9OqVavUo0cPRUZGauXKldq2bZun/4gRIyRJiYmJOnbsmI4d\nO6Zz584pKytL4eHhSk5OVkVFhZYtW6bu3bvr+PHj6tSpkz788EM1btxY/fr101/+8hdNnTpVXbp0\n0YYNG1RaWqqZM2fqv//7vxUTE6PVq1drypQpysjIUFlZmWJiYjx/fn5++vLLL3Xo0CE98sgj6t69\nu7p37641a9b45PsDAAAA0DAsXrxYb731liR5njdulLf2xUPdInTwIWPMFccTJkxQdna2ioqKNHbs\nWJ05c+aq/SWpvLxcPXv29KyW2Lhxo3r37q2NGzfqyJEjCgkJUXZ2trp37y5rrSoqKpSamupZLXG1\n1Q+SFBAQoIKCAhUUFGjs2LF65JFHdM899+iZZ57Rc889p40bN2rhwoV64oknnPuSAAAAADR4Dzzw\ngF566SVflwEfIHTwoT179mjdunWSpKysLPXp00eS5O/vrxMnTig7O7ta//nz50uS8vLy1Lp1a7Vq\n1Upt2rSRv7+/pPOrJfbs2SO3260ePXooIiJC27dvV3x8vI4ePaqqqirFx8fr+PHjntUSR44cuWad\na9as0axZszRnzhxJ0vLlyzVp0iTFxMTogQce0LFjx3TixAmvfS8AAAAAGo7S0lJ16tRJY8aMUceO\nHTVq1CgtX75cvXv3VmhoqDZs2KC5c+dq0qRJV1zrdrs1cOBARUdHq1u3btq9e7dOnDihAQMGqFu3\nboqMjNRnn33m6V9VVaWxY8cqIiJC9957r06fPl2Xt4pvgdDBh8LCwjR9+nSFh4fr8OHDGj9+vMaO\nHasuXbpo8ODB6t69e7X+zZs3V9euXZWSkqLZs2dLkm677TZ98skniomJ0ZYtW2SM0SeffKKPP/5Y\n/v7+qqio0G9/+1s9/fTTaty4sXr16uXpf/bs2RpXT1zqwIED+vnPf64//elPatGihSTp3LlzWr9+\n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\nUnXp0qXW4+Tk5Gjt2rWe45kzZ2revHm1HjcoKEj//ve/az0OAAAAAKD+auzrAlC/5eTkqEWLFurV\nq5ckKSUlxccVAQAAAAAaCkKHm1hlZaVGjRql/Px8RUREaN68ecrIyNCSJUt0+vRp9erVS++9956M\nMerXr5+io6P1xRdfqLKyUnPmzNH3v/99zZw5U35+fvqf//kfZWZmasWKFWrRooVGjhypH//4x565\nioqKVFJSottuu00pKSnas2ePJOndd99V7969VV5erhEjRmj//v3q2bOnrLW++loAAAAAAHWEn1fc\nxHbt2qUJEyZox44datWqlWbMmKFJkyZp48aN2rp1q06fPq2lS5d6+p86dUoFBQWaMWOGHn/8cQUF\nBSklJUXPPfecCgoK1LdvX0/fgIAAFRQUqKCgQGPHjtUjjzyie+65R88884yee+45bdy4UQsXLtQT\nTzwhSUpPT1efPn20bds2PfTQQ55QAgAAAABw82Klw00sMDBQvXv3liSNHj1a06ZNU4cOHfTOO+/o\n1KlT+uqrrxQREaH7779fkjRixAhJUmJioo4dO6YjR45cc441a9Zo1qxZysvLkyQtX75c27dv95w/\nduyYTpw4odzcXC1atEiSdN999+n222/36r0CAAAAAOofQoebmDHmiuMJEybI5XIpMDBQU6ZM0Zkz\nZ76x/zc5cOCAfv7zn2vx4sVq0aKFJOncuXNav369mjdv7qW7AAAAAAA0VPy84ia2Z88erVu3TpKU\nlZWlPn36SJL8/f114sQJZWdnV+s/f/58SVJeXp5at26t1q1bq2XLljp+/PgVY1dUVGjYsGF6++23\n1bFjR0/7vffeq8zMTM9xQUGBpPOrJ7KysiRJf/nLX3T48GEv3ikAAAAAoD4idLiJhYWFafr06QoP\nD9fhw4c1fvx4jR07Vl26dNHgwYPVvXv3av2bN2+url27KiUlRbNnz5Yk3X///frkk08UExOj1atX\ne/quXbtWLpdLaWlpiomJUUxMjMrKyjRt2jS5XC5FRUWpc+fOmjlzpiQpLS1Nubm5ioiI0KJFi3T3\n3XfX3RcBAAAAAPAJU1/fIhAXF2ddLpevy7hl9OvXTxkZGYqLi/N1KQAAAACAes4Ys8lae80HSFY6\nNCBZRVkKmx4mv9f9FDY9TFlFWb4uCQAAAACAq2IjyQYiqyhLqStSlZyUrHEB41RSVqLUFamSpJGR\n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\n586dkyT97W9/U8+ePdWtWzcNGzZMJ06c0LRp01RWVqb+/furf//+nrpefvllRUdHKyEhQQcPHqz7\nLwbATY/QAQAAAHDQtm3b9Oabb2rlypUqLCzUb3/7W0nSvn37tHbtWk2dOlW/+tWvlJSUpA0bNmjV\nqlWaPHmyTp48qdmzZ6t169bauHGjNm7cqFmzZumf//ynJGnDhg3KzMzU9u3btXv3bi1atEj//ve/\n9eabb2r58uXKz89XXFycpk6dqqeffloBAQFatWqVVq1aJUk6efKkEhISVFhYqMTERM2aNctn3xGA\nm1djXxcAAAAA3MxWrlypYcOGyd/fX5L0ve99T5I0bNgw+fn5STq/OmHx4sXKyMiQJJ05c0Z79uzR\n3/72N23ZskXZ2dmSpKNHj6q4uFhNmzZVfHy8goODJUkjRoxQXl6emjdvru3bt6t3796SpK+//lo9\ne/assa6mTZtq6NChkqTY2FgtW7bMoW8AwK2M0AEAAADwge9+97uez9ZaLVy4UGFhYdX6WGuVmZmp\nwYMHV2vPycmRMaZamzFG1loNGjRIH3/88TXnb9KkiWcMPz+/OttbAsCthZ9XAAAAAA5KSkrSggUL\nVF5eLkn66quvrugzePBgZWZmylorSdq8ebOn/fe//70qKiokSf/4xz908uRJSed/XvHPf/5T586d\n0/z589WnTx8lJCRozZo1crvdks7/hOIf//iHJKlly5Y6fvy4szcLAJdhpQMAAADgoIiICL388sv6\n4Q9/KD8/P3Xt2vWKPq+++qqeffZZRUVF6dy5c+rQoYOWLl2qJ554QqWlperWrZustWrXrp0+/fRT\nSVL37t01adIkud1u9e/fXw899JAaNWqkuXPnasSIETp79qwk6c0331THjh315JNPasiQIZ69HQCg\nLpiLaWp9ExcXZ10ul6/LAAAAAK6QVZSl9Nx0ucvdCmkborTENI2MHFln8+fk5CgjI0NLly6tszkB\n4FLGmE3W2rhr9WOlAwAAAHADsoqylLoiVclJyRoXME4lZSVKXZEqSXUaPABAQ8BKBwAAAOAGhE0P\n06C+gxQaGOppK95brGWrl2nXxF0+rAwA6s71rnRgI0kAAADgBrjL3QoOCK7WFhwQLHe520cVAUD9\nRegAAAAA3ICQtiEqKSup1lZSVqKQtiE+qggA6i9CBwAAAOAGpCWmKXtltor3FquqqkrFe4uVvTJb\n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\nniEyMpIhQ4YUu7KhuDkLW5wuXLjQ2V9RRERuEko6iIiIlLHY3bFMjp/s0m4O5aXwe13+fWd0m1Em\n37c01zErKwsoSJpcrW5FYa0DwNHpAwrqO+zcudOx/c4779xw7M7Ws2dP5s6dS0BAADabjfbt23P0\n6FG6dOlCfn4+AH/6058cq2MyMzOxLMuxOgYgPDycp556qsirFdcyadIkBgwYwG233UbXrl358ccf\nnfb9RETk5qGWmSIiImWo8Ml/RNeIK57836yJB2e4Fa9jeSertm7dyvPPP3/VV3JERESupaQtM5V0\nEBERKUO22TbCQsMc3RwAUg+nsjphNSkjU1wYWeVyq13H8k6yTJs2jTlz5hATE0PHjh3LfHwREbn5\nlTTpoEKSIiIiZejAmQM09mlcZJ8ruzlUVrfadZwcP5mIrhH4+/rj7u5epPWoM7zyyiscOnRICQcR\nEXE6JR1ERETKUJO6TUg7llZknyu7OVRWt9p1vNWSLCIicutQ0kFERKQMTew0kbh1caQeTiUvL4/U\nw6nErYtjYqeJrg6tUrnVruOtlmQREZFbh7pXiIiIlCFndnO4ldxq13Fip4lXrekgIiJSmamQpIiI\niEgFcCu1WhURkcpP3StERERERERExCnUvUJEREREREREXEpJBxERERERERFxCiUdRERERERERMQp\nlHQQEREREREREadQ0kFEREREREREnEJJBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ\n0kFEREREREREnEJJBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ0kFEREREREREnEJJ\nBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ0kFEREREREREnEJJBxERERERERFxCiUd\nRERERERERMQplHQQEREREREREadQ0kFEREREREREnMJYluXqGIpljDkFHHJ1HOJS9YDTrg5CKg3d\nL1Iaul+ktHTPSGnofpHS0j0jpVFR7pd7LMuqf72DKmzSQcQYs9WyrDaujkMqB90vUhq6X6S0dM9I\naeh+kdLSPSOlUdnuF71eISIiIiIiIiJOoaSDiIiIiIiIiDiFkg5SkX3s6gCkUtH9IqWh+0VKS/eM\nlIbuFykt3TNSGpXqflFNBxERERERERFxCq10EBERERERERGnUNJBKixjzHRjzD5jzC5jzDJjjLer\nY5KKzRgzwBizxxiTb4ypNBV9pXwZY3oaY1KMMQeMMa+4Oh6p2Iwx840xJ40xya6ORSo+Y4yvMWa9\nMeafl/4+GuvqmKTiMsZUN8b8YIzZeel+mezqmKRyMMa4G2N2GGNWuTqWklDSQSqy1UALy7KCgP3A\nqy6ORyq+ZOBRIN7VgUjFZIxxB2YDvYBA4HFjTKBro5IKbgHQ09VBSKWRC7xgWVYg0B4Yqf/HyDX8\nAnS1LCsYCAF6GmPauzgmqRzGAntdHURJKekgFZZlWf+wLCv30uZm4G5XxiMVn2VZey3LSnF1HFKh\ntQMOWJaVZlnWRWAJ0MfFMUkFZllWPPCTq+OQysGyrOOWZW2/9PM5Cn4puMu1UUlFZRXIurRZ5dIf\nFdyTazLG3A08DMxzdSwlpaSDVBbDgK9dHYSIVHp3AYcv2z6CfiEQEScwxjQCWgLfuzYSqcguLZNP\nAk4Cqy3L0v0i1zMTeAnId3UgJeXh6gDk1maMWQM0LOaj1y3LWnHpmNcpWK4YU56xScVUkntGRETE\nlYwxXsAXwDjLsv7j6nik4rIsKw8IuVS7bJkxpoVlWaohI8UyxvQGTlqWtc0Y08XV8ZSUkg7iUpZl\ndb/W58aYoUBvoJul/q7C9e8Zkes4Cvhetn33pX0iImXCGFOFgoRDjGVZS10dj1QOlmWdNcasp6CG\njJIOcjUdgHBjzENAdaC2MWaxZVmRLo7rmvR6hVRYxpieFCwdCrcs62dXxyMiN4UtgL8xxs8YUxUY\nCHzp4phE5CZhjDHA/wX2WpY1w9XxSMVmjKlf2J3NGFMDCAP2uTYqqcgsy3rVsqy7LctqRMG/YdZV\n9IQDKOkgFdsHQC1gtTEmyRgz19UBScVmjOlnjDkC3A/83RjzratjkorlUnHaUcC3FBR4+5tlWXtc\nG5VUZMaYvwKbAJsx5ogx5mlXxyQVWgdgCND10r9dki49kRQpzp3AemPMLgqS4qsty6oULRBFSsNo\nxbqIiIiIiIiIOINWOoiIiIiIiIiIUyjpICIiIiIiIiJOoaSDiIiIiIiIiDiFkg4iIiIiIiIi4hRK\nOoiIiIiIiIiIUyjpICIiIiIiIiJOoaSDiIiIiIiIiDiFkg4iIiIiIiIi4hT/HzifDGjDHKGBAAAA\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f4ab5dfe438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "\n",
    "words = sum([[k] + v for k, v in similar_words.items()], [])\n",
    "wvs = ft_model.wv[words]\n",
    "\n",
    "pca = PCA(n_components=2)\n",
    "np.set_printoptions(suppress=True)\n",
    "P = pca.fit_transform(wvs)\n",
    "labels = words\n",
    "\n",
    "plt.figure(figsize=(18, 10))\n",
    "plt.scatter(P[:, 0], P[:, 1], c='lightgreen', edgecolors='g')\n",
    "for label, x, y in zip(labels, P[:, 0], P[:, 1]):\n",
    "    plt.annotate(label, xy=(x+0.06, y+0.03), xytext=(0, 0), textcoords='offset points')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.23493268,  0.14237943,  0.35635167,  0.34680951,  0.09342121,\n",
       "        0.11546664,  0.06848907, -0.35488272,  0.03399122,  0.26420799,\n",
       "        0.05554794, -0.41830763, -0.38671952,  0.38901171, -0.26265353,\n",
       "        0.03854577, -0.22641954,  0.16377565, -0.0347381 , -0.43721643,\n",
       "       -0.18751772,  0.03163779,  0.12475108,  0.28285024,  0.11760047,\n",
       "       -0.24720524, -0.25686634, -0.01248573,  0.10454553,  0.29713026,\n",
       "       -0.04111641, -0.44567475, -0.14127477, -0.20297718,  0.05123538,\n",
       "       -0.19558378, -0.24215269, -0.22690177,  0.45923024,  0.10298209,\n",
       "        0.07537983,  0.23333244, -0.34262201,  0.36080933, -0.05114703,\n",
       "       -0.19241138, -0.46164852, -0.25011861, -0.25578389, -0.11737192,\n",
       "        0.05247249, -0.00788139, -0.4545919 ,  0.0890988 , -0.58961135,\n",
       "       -0.15117864,  0.25921214,  0.50884134, -0.03514979, -0.48242396,\n",
       "       -0.20581312,  0.1193359 ,  0.02668546,  0.22564436, -0.00703725,\n",
       "        0.34001571, -0.19389269, -0.59574127,  0.13655224, -0.4419246 ,\n",
       "       -0.12572952, -0.24745932,  0.23438101, -0.17981783, -0.72245467,\n",
       "        0.06801575,  0.02291457, -0.52627361,  0.06928489,  0.31512719,\n",
       "       -0.24033862,  0.41592884, -0.01954436, -0.10545548,  0.05702253,\n",
       "        0.38872063, -0.26490289,  0.34405881, -0.41851836, -0.28361416,\n",
       "        0.27255496, -0.15021783, -0.08518736, -0.28278247,  0.09768565,\n",
       "        0.13725466, -0.09564053, -0.05963023, -0.31269372, -0.19060139], dtype=float32)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ft_model.wv['jesus']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.333260876685\n",
      "0.698824900473\n"
     ]
    }
   ],
   "source": [
    "print(ft_model.wv.similarity(w1='god', w2='satan'))\n",
    "print(ft_model.wv.similarity(w1='god', w2='jesus'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Odd one out for [ god jesus satan john ]: satan\n",
      "Odd one out for [ john peter james judas ]: judas\n"
     ]
    }
   ],
   "source": [
    "st1 = \"god jesus satan john\"\n",
    "print('Odd one out for [',st1, ']:', ft_model.wv.doesnt_match(st1.split()))\n",
    "\n",
    "st2 = \"john peter james judas\"\n",
    "print('Odd one out for [',st2, ']:', ft_model.wv.doesnt_match(st2.split()))"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
